【问题标题】:How to give ADO.NET Parameters如何给 ADO.NET 参数
【发布时间】:2015-07-15 01:31:59
【问题描述】:

我想创建一个将记录添加到数据库的 SQL 命令。我尝试了以下代码,但它似乎不起作用:

SqlCommand comand = new SqlCommand("INSERT INTO Product_table Values(@Product_Name,@Product_Price,@Product_Profit,@p)", connect);
SqlParameter ppar = new SqlParameter();
ppar.ParameterName = "@Product_Name";
ppar.Value = textBox1.Text;
MessageBox.Show("Done");
comaand.Parameters.Add(ppar);

【问题讨论】:

    标签: c# sql sql-server ado.net


    【解决方案1】:

    应该使用类似以下的内容:

    SqlCommand cmd = new SqlCommand("INSERT INTO Product_table Values(@Product_Name, @Product_Price, @Product_Profit, @p)", connect);
    cmd.Parameters.Add("@Product_Name", SqlDbType.NVarChar, ProductNameSizeHere).Value = txtProductName.Text;
    cmd.Parameters.Add("@Product_Price", SqlDbType.Int).Value = txtProductPrice.Text;
    cmd.Parameters.Add("@Product_Profit", SqlDbType.Int).Value = txtProductProfit.Text;
    cmd.Parameters.Add("@p", SqlDbType.NVarChar, PSizeHere).Value = txtP.Text;
    cmd.ExecuteNonQuery();
    

    假设@p 参数是一些NVarChar。

    最好避免使用 AddWithValue,在此处查看原因: https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

    同样在 INSERT SQL 语句中,最好在值本身之前提供值的名称(如数据库中定义的那样),如https://www.w3schools.com/sql/sql_insert.asp所示

    【讨论】:

      【解决方案2】:

      在您的情况下,您似乎使用的是 .NET。使用参数很简单:

      C#

       string sql = "SELECT empSalary from employee where salary = @salary";
       SqlConnection connection = new SqlConnection(/* connection info */);
       SqlCommand command = new SqlCommand(sql, connection);
      
       command.Parameters.AddWithValue("salary", txtSalary.Text);
      

      【讨论】:

      • 我想是的。您应该先尝试,然后让我知道有关它的任何问题。
      • 顺便说一句,在上面的代码中,在 AddWithValue 处没有 @ 时提到了“salary”。 @ 是可选的还是必需的?
      • @FelixPamittan 离开AddWithValue 的一个不利方面是,如果字符串为空,command.Parameters.Add("salary", SqlDbType.NVarChar).Value = txtSalary.Text; 就会死机。如果你想避免它,你必须为所有类型指定一个Size;这变得非常乏味,甚至更容易出错。例如:空字符串的大小是多少? int 的大小是多少? uniqueidentifier 的大小是多少? *nvarchar(max) 的大小是多少?这些都是有答案的东西;但(非常)不明显。
      • 参数名称不需要@字符,并且对于某些数据库供应商来说失败,因为它们具有不同的符号。
      【解决方案3】:

      我觉得这对你有用

      SqlCommand command = new SqlCommand("inserting", con);
      command.CommandType = CommandType.StoredProcedure;
      command.Parameters.Add("@Firstname", SqlDbType.NVarChar).Value = TextBox1.Text;
      command.Parameters.Add("@Lastname", SqlDbType.NVarChar).Value = TextBox2.Text;
      command.ExecuteNonQuery();
      

      【讨论】:

      • 不要认为问题是关于如何使用存储过程,他们正在尝试一个简单的 INSERT
      • 但是 command.Parameters.Add("@ParamName", SqlDbType.xx).Value = someValue 确实是最好的语法(如blogs.msmvps.com/jcoehoorn/blog/2014/05/12/… 中所述)
      【解决方案4】:

      试试这个

      command.Parameters.AddWithValue("@parameter",yourValue);
      command.ExecuteNonQuery();
      

      我的意思是你忘了使用 command.executeNonQuery();

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多