C# C“Error必须声明标量变量”@EmpID“;SQL插入

C# C“Error必须声明标量变量”@EmpID“;SQL插入,c#,sql,variables,scalar,C#,Sql,Variables,Scalar,我已经在这个问题上纠缠了好几个星期,我在论坛上到处尝试解决其他人遇到的同一个问题,但到目前为止它仍然不起作用。我不确定我做错了什么 我正在制作一个用户交互页面,当单击按钮保存数据时,该页面获取数据并将其提交/插入SQL数据库 EmpID是来自生成用户雇员ID的文本框的数据。EmpID随后作为EmployeeID值存储在SQL数据库中 当我运行它并试图保存数据时,我不断得到错误 必须声明标量变量“@EmpID” void UpdateInternal0() { 尝试 { 使用(SqlConnect

我已经在这个问题上纠缠了好几个星期,我在论坛上到处尝试解决其他人遇到的同一个问题,但到目前为止它仍然不起作用。我不确定我做错了什么

我正在制作一个用户交互页面,当单击按钮保存数据时,该页面获取数据并将其提交/插入SQL数据库

EmpID是来自生成用户雇员ID的文本框的数据。EmpID随后作为EmployeeID值存储在SQL数据库中

当我运行它并试图保存数据时,我不断得到错误

必须声明标量变量“@EmpID”

void UpdateInternal0()
{
尝试
{
使用(SqlConnection con=newsqlconnection(Properties.Settings.Default.adminConnectionString))
{
con.Open();
foreach(InternalGrid0.SelectedItems中的DataRowView drv)
{
数据行行=drv.row;
bool isSelected=Convert.ToBoolean(drv.Row[0]);
如果(当选)
{
string sqlString=“插入ChecklistTransitionTable(RelatedEmployeeID,RelatedDocIdx)”+
“值(@EmpID,@DOC_Number)”;
使用(SqlCommand cmd=newsqlcommand(sqlString,con))
{
for(int i=0;i
您正在执行两次查询。 第一次使用
ExecuteScalar()
,然后清除参数值并在
ExecuteNonQuery()调用中重新执行查询(现在没有参数值)。后者抛出异常

也许这个修改过的版本会按预期工作

void UpdateInternal0(int employeeId)
{
    try
    {
        using (SqlConnection con = new SqlConnection(Properties.Settings.Default.adminConnectionString))
        {
            con.Open();

            foreach (DataRowView drv in InternalGrid0.SelectedItems)
            {
                DataRow row = drv.Row;
                bool isSelected = Convert.ToBoolean(drv.Row[0]);
                if (isSelected)
                {
                    string sqlString = "INSERT INTO ChecklistTransitionTable (RelatedEmployeeID, RelatedDocIdx) VALUES (@EmpID, @DOC_Number)";

                    using (SqlCommand cmd = new SqlCommand(sqlString, con))
                    {
                        for (int i = 0; i < InternalGrid0.Columns.Count; i++)
                        {
                            int DocIdx = 0;
                            try { 
                                 DocIdx = (int)drv.Row[i];
                            } catch (InvalidCastException ice) {
                                 // You should handle this here...
                            }

                            cmd.Parameters.AddWithValue("@EmpID", employeeId);
                            cmd.Parameters.AddWithValue("@DOC_Number", DocIdx);

                            int result = cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();

                            Console.WriteLine("Test");
                            //Check Error
                            if (result < 0)
                            {
                                System.Windows.Forms.MessageBox.Show("Error inserting data into database!");
                            }
                        }
                    }
                }
            }
        }
        System.Windows.Forms.MessageBox.Show("Employee data successfully updated.");
    }

    catch (SqlException ex)
    {
        System.Windows.Forms.MessageBox.Show(string.Format("\nMessage ---\n{0}", ex.Message));
    }
}

private void BtnGridUpdate_Click(object sender, EventArgs e)
{
    int employeeID = Convert.ToInt32(EmpID.Text);
    UpdateInternal0(employeeID);
}
void UpdateInternal0(int-employeeId)
{
尝试
{
使用(SqlConnection con=newsqlconnection(Properties.Settings.Default.adminConnectionString))
{
con.Open();
foreach(InternalGrid0.SelectedItems中的DataRowView drv)
{
数据行行=drv.row;
bool isSelected=Convert.ToBoolean(drv.Row[0]);
如果(当选)
{
string sqlString=“插入ChecklistTransitionTable(RelatedEmployeeID,RelatedDocIdx)值(@EmpID,@DOC_Number)”;
使用(SqlCommand cmd=newsqlcommand(sqlString,con))
{
for(int i=0;i
你说过
EmployeeID
来自一个
TextBox
ID
是以字符串还是int的形式存储在数据库中?@daShier EmployeeID是以int的形式存储的,TextBox ID是EmpID。这就是为什么我有行'int EmployeeID=Convert.ToInt32(EmpID.Text);转换它。此外,错误是正确的。您正在执行命令(
cmd.ExecuteScalar()
),正在清除参数(
cmd.parameters.Clear()
),然后再次执行命令(
cmd.ExecuteNonQuery()
)。再次执行命令时,该参数已丢失。此外,此代码行
int EmployeeID=Convert.ToInt32(EmpID.Text);
会发出警报。如果用户在文本框中输入
Damon
,会发生什么情况?运行此代码会给我一个不同的错误-System.InvalidCastException:“指定的强制转换不是val?”