繁体   English   中英

列名无效SQL Server

[英]Invalid Column Name SQL Server

每当我提交表单时,它都会给我一个错误代码:

所有活动专家,电话,电话2等的“无效列名”和@SPECIALIST,@ CUST_PHONE,@ CUST_PHONE2等。

这是我下面的代码,也许我没有正确编写SQL语句或参数? 使用@ infront的是我的数据库中的内容,其他小写的是我的文本框。 我对这种编码比较陌生。

编辑:将我的INSERT INTO语句更改为建议的内容。 错误仍然存​​在,但只是最小化

“无效的列名称eventspecialist,无效的列名称电话,无效的列名称phone2等”

private void execution(string eventspecialist, string phone, string phone2, string firstname, string lastname, string besttime, string companyname, string nonprofit, string requesteddate, string requestedtime, string attendance, string eventtype, string other, string leadsource, string notes, string catering, string bar, string damagedeposit, string dancefloor, string griddate, string gridnotes, string comments)
{
    SqlConnection conn = new SqlConnection(GetConnectionString());

    string sql = "INSERT INTO tblcontacts (@SPECIALIST, @CUST_PHONE1, @CUST_PHONE2, @CUST_FNAME, @CUST_LNAME, @BEST_TIME, @COMPANY_NAME, @NONPROFIT, @REQ_DATE, @REQ_TIME, @ATTENDANCE, @EVENT_TYPE, @OTHER_DESC, @LEAD_SOURCE, @NOTES, @CATERING, @BAR, @DAMAGE_DEPOSIT, @DANCE_FLOOR) VALUES (eventspecialist, phone, phone2, firstname, lastname, besttime, companyname, nonprofit, requesteddate, requestedtime, attendance, eventtype, other, leadsource, notes, catering, bar, damagedeposit, dancefloor)";
    string sql2 = "INSERT INTO tblnotes (@NOTEDATE, @NOTEBY, @COMMENTS) VALUES (griddate, gridnotes, comments)";

    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);

        cmd.Parameters.Add("@SPECIALIST", SqlDbType.NVarChar, 50).Value = eventspecialist;
        cmd.Parameters.Add("@CUST_PHONE1", SqlDbType.NVarChar, 50).Value = phone;
        cmd.Parameters.Add("@CUST_PHONE2", SqlDbType.NVarChar, 50).Value = phone2;
        cmd.Parameters.Add("@CUST_FNAME", SqlDbType.NVarChar, 50).Value = firstname;
        cmd.Parameters.Add("@CUST_LNAME", SqlDbType.NVarChar, 50).Value = lastname;
        cmd.Parameters.Add("@BEST_TIME", SqlDbType.NVarChar, 50).Value = besttime;
        cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar, 225).Value = companyname;
        cmd.Parameters.Add("@NONPROFIT", SqlDbType.NVarChar, 10).Value = nonprofit;
        cmd.Parameters.Add("@REQ_DATE", SqlDbType.Date, 20).Value = requesteddate;
        cmd.Parameters.Add("@REQ_TIME", SqlDbType.Time, 20).Value = requestedtime;
        cmd.Parameters.Add("@ATTENDANCE", SqlDbType.Int, 50).Value = attendance;
        cmd.Parameters.Add("@EVENT_TYPE", SqlDbType.NVarChar, 50).Value = eventtype;
        cmd.Parameters.Add("@OTHER_DESC", SqlDbType.NVarChar, 225).Value = other;
        cmd.Parameters.Add("@LEAD_SOURCE", SqlDbType.NVarChar, 50).Value = leadsource;
        cmd.Parameters.Add("@NOTES", SqlDbType.NVarChar, 225).Value = notes;
        cmd.Parameters.Add("@CATERING", SqlDbType.NVarChar, 1).Value = catering;
        cmd.Parameters.Add("@BAR", SqlDbType.NVarChar, 1).Value = bar;
        cmd.Parameters.Add("@DAMAGE_DEPOSIT", SqlDbType.NVarChar, 19).Value = damagedeposit;
        cmd.Parameters.Add("@DANCE_FLOOR", SqlDbType.Money).Value = Decimal.Parse(dancefloor);


        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
    }
    catch (System.Data.SqlClient.SqlException ex_msg)
    {
        string msg = "Error occured while inserting";
        msg += ex_msg.Message;
        throw new Exception(msg);
    }
    finally
    {

        conn.Close();
    }
    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql2, conn);

        cmd.Parameters.Add("@NOTEDATE", SqlDbType.Date, 50).Value = griddate;
        cmd.Parameters.Add("@NOTEBY", SqlDbType.NVarChar, 50).Value = gridnotes;
        cmd.Parameters.Add("@COMMENTS", SqlDbType.NVarChar, 50).Value = comments;

        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
    }
    catch (System.Data.SqlClient.SqlException ex_msg)
    {
        string msg = "Error occured while inserting";
        msg += ex_msg.Message;
        throw new Exception(msg);
    }
    finally
    {

        conn.Close();
    }

}
protected void Page_Load(object sender, EventArgs e)
{
    griddate.Text = DateTime.Now.ToString("yyyy/MM/dd");
}
protected void submit_Click(object sender, EventArgs e)
{
    if (requesteddate.Text == "")
    {
        Finish.Text = "Please complete the form!";
    }
    else if (requestedtime.Text == "")
    {
        Finish.Text = "Please complete the form!";
    }
    else if (attendance.Text == "")
    {
        Finish.Text = "Please complete the form!";
    }
    else
    {
        execution(eventspecialist.Text, phone.Text, phone2.Text, firstname.Text, lastname.Text, besttime.SelectedItem.Text, companyname.Text, nonprofit.Text, requesteddate.Text, requestedtime.Text, attendance.Text, eventtype.SelectedItem.Text, other.Text, leadsource.SelectedItem.Text, notes.Text, catering.Text, bar.Text, damagedeposit.Text, dancefloor.SelectedItem.Text, griddate.Text, gridnotes.SelectedItem.Text, comments.Text);
        Finish.Visible = false;
        conform.Visible = true;
    }
}

第一列名称然后是变量

string sql = "INSERT INTO tblcontacts (Col1,Col2,...) VALUES (@Var1,@Var2,...)"

我想你的专栏是

SPECIALIST, CUST_PHONE1, CUST_PHONE2, CUST_FNAME, CUST_LNAME, BEST_TIME, 
COMPANY_NAME, NONPROFIT, REQ_DATE, REQ_TIME, ATTENDANCE, EVENT_TYPE, OTHER_DESC, 
LEAD_SOURCE, NOTES, CATERING, BAR, DAMAGE_DEPOSIT, DANCE_FLOOR

如果是这样,你应该以这种方式改变你的INSERT INTO

INSERT INTO tblcontacts 
(SPECIALIST, CUST_PHONE1, CUST_PHONE2, CUST_FNAME, CUST_LNAME, BEST_TIME, 
COMPANY_NAME, NONPROFIT, REQ_DATE, REQ_TIME, ATTENDANCE, EVENT_TYPE, OTHER_DESC, LEAD_SOURCE, 
NOTES, CATERING, BAR, DAMAGE_DEPOSIT, DANCE_FLOOR)
VALUES
(@SPECIALIST, @CUST_PHONE1, @CUST_PHONE2, @CUST_FNAME, @CUST_LNAME, @BEST_TIME, @COMPANY_NAME, 
 @NONPROFIT, @REQ_DATE, @REQ_TIME, @ATTENDANCE, @EVENT_TYPE, @OTHER_DESC, @LEAD_SOURCE, @NOTES, 
 @CATERING, @BAR, @DAMAGE_DEPOSIT, @DANCE_FLOOR)

execution方法中,您正在创建参数,但是,然后在insert语句中
首先输入实际的列名,然后在值部分中输入参数名称
(使用@prefix)

作为旁注,下次尝试更好地格式化代码。

你的列和值是错误的方式:

string sql = "INSERT INTO tblcontacts (eventspecialist, phone, phone2, firstname, lastname, besttime, companyname, nonprofit, requesteddate, requestedtime, attendance, eventtype, other, leadsource, notes, catering, bar, damagedeposit, dancefloor) VALUES (@SPECIALIST, @CUST_PHONE1, @CUST_PHONE2, @CUST_FNAME, @CUST_LNAME, @BEST_TIME, @COMPANY_NAME, @NONPROFIT, @REQ_DATE, @REQ_TIME, @ATTENDANCE, @EVENT_TYPE, @OTHER_DESC, @LEAD_SOURCE, @NOTES, @CATERING, @BAR, @DAMAGE_DEPOSIT, @DANCE_FLOOR)";

你有倒退的订单:概括,它是:

insert into tableName (column1, ..., column20) values (value1, ..., value20)

所以; 只需交换列和值:

string sql = "INSERT INTO tblcontacts (eventspecialist, phone, phone2, firstname, lastname, besttime, companyname, nonprofit, requesteddate, requestedtime, attendance, eventtype, other, leadsource, notes, catering, bar, damagedeposit, dancefloor) VALUES (@SPECIALIST, @CUST_PHONE1, @CUST_PHONE2, @CUST_FNAME, @CUST_LNAME, @BEST_TIME, @COMPANY_NAME, @NONPROFIT, @REQ_DATE, @REQ_TIME, @ATTENDANCE, @EVENT_TYPE, @OTHER_DESC, @LEAD_SOURCE, @NOTES, @CATERING, @BAR, @DAMAGE_DEPOSIT, @DANCE_FLOOR)";
string sql2 = "INSERT INTO tblnotes (griddate, gridnotes, comments) VALUES (@NOTEDATE, @NOTEBY, @COMMENTS)";

你的INSERT语句都错了.....

而不是这个:

INSERT INTO tblcontacts (@SPECIALIST, @CUST_PHONE1, .....)
VALUES (eventspecialist, phone, .....);

你需要使用相反的方法:

INSERT INTO tblcontacts (eventspecialist, phone, .....)
VALUES (@SPECIALIST, @CUST_PHONE1, .....);

您需要在表名后的列表中包含表的列名,并在VALUES后使用参数' (带有前导@

您已将列和列作为参数输入参数。 尝试相反的方式。

用以下代码替换您的代码

"INSERT INTO tblcontacts (SPECIALIST, CUST_PHONE1, CUST_PHONE2, CUST_FNAME, CUST_LNAME, BEST_TIME, COMPANY_NAME, NONPROFIT, REQ_DATE, REQ_TIME, ATTENDANCE, EVENT_TYPE, OTHER_DESC, LEAD_SOURCE, NOTES, CATERING, BAR, DAMAGE_DEPOSIT, DANCE_FLOOR) VALUES (@eventspecialist, @phone, @phone2, @firstname, @lastname, @besttime, @companyname, @nonprofit, @requesteddate, @requestedtime, @attendance, @eventtype, @other, @leadsource, @notes, @catering, @bar, @damagedeposit, @dancefloor)";

和这里

    cmd.Parameters.Add("@eventspecialist", SqlDbType.NVarChar, 50).Value = eventspecialist;
    cmd.Parameters.Add("@phone", SqlDbType.NVarChar, 50).Value = phone;
    cmd.Parameters.Add("@phone2", SqlDbType.NVarChar, 50).Value = phone2;
    cmd.Parameters.Add("@firstname", SqlDbType.NVarChar, 50).Value = firstname;
    cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 50).Value = lastname;
    cmd.Parameters.Add("@besttime", SqlDbType.NVarChar, 50).Value = besttime;
    cmd.Parameters.Add("@companyname", SqlDbType.NVarChar, 225).Value = companyname;
    cmd.Parameters.Add("@nonprofit", SqlDbType.NVarChar, 10).Value = nonprofit;
    cmd.Parameters.Add("@requesteddate", SqlDbType.Date, 20).Value = requesteddate;
    cmd.Parameters.Add("@requestedtime", SqlDbType.Time, 20).Value = requestedtime;
    cmd.Parameters.Add("@attendance", SqlDbType.Int, 50).Value = attendance;
    cmd.Parameters.Add("@eventtype", SqlDbType.NVarChar, 50).Value = eventtype;
    cmd.Parameters.Add("@other", SqlDbType.NVarChar, 225).Value = other;
    cmd.Parameters.Add("@leadsource", SqlDbType.NVarChar, 50).Value = leadsource;
    cmd.Parameters.Add("@notes", SqlDbType.NVarChar, 225).Value = notes;
    cmd.Parameters.Add("@catering", SqlDbType.NVarChar, 1).Value = catering;
    cmd.Parameters.Add("@bar", SqlDbType.NVarChar, 1).Value = bar;
    cmd.Parameters.Add("@damagedeposit", SqlDbType.NVarChar, 19).Value = damagedeposit;
    cmd.Parameters.Add("@dancefloor", SqlDbType.Money).Value = Decimal.Parse(dancefloor);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM