C#设置字符串变量作为SQL字符串语句的参数

C#设置字符串变量作为SQL字符串语句的参数,c#,asp.net,sql-server,datasource,C#,Asp.net,Sql Server,Datasource,我来自Java编程,最近刚刚尝试学习C#for web(.aspx)。我是新来的,仍然熟悉组件以及C#组件如何绑定到SQL Server数据库 我无法将文本框中分配给字符串变量的值设置到我的SQL语句中 这是我的密码 protected void Btn_additem_Click(object sender, EventArgs e) { String category = ""; String itemName = Tb_itemname.Text; Str

我来自Java编程,最近刚刚尝试学习C#for web(
.aspx
)。我是新来的,仍然熟悉组件以及C#组件如何绑定到SQL Server数据库

我无法将
文本框
中分配给
字符串
变量的值设置到我的SQL语句中

这是我的密码

 protected void Btn_additem_Click(object sender, EventArgs e)
 {
     String category = "";
     String itemName = Tb_itemname.Text;
     String code = Tb_itemcode.Text;
     String brand = Tb_brand.Text;
     String serial = Tb_serial.Text;
     String capacity = Tb_capacity.Text;
     String version = Tb_version.Text;

     if (Rbl_hardsoft.SelectedValue.Equals("Hardware")) 
     {
         category = "Hardware";
     }
     else if(Rbl_hardsoft.SelectedValue.Equals("Software"))
     {
         category = "Software";
     }

     String SQL = "INSERT INTO ItemMasterData(item_code,item_category, item_name, item_brand,item_serialnumber, item_capacity, item_version) " +
            "VALUES(?,?,?,?,?,?,?)";
}
我的目标是能够将字符串变量
category
itemName
code
…等作为的参数

在Java中,我们通常使用
PreparedStatement
,其中我们使用作为参数,然后通过setter设置其值。比如说,

ps.setString(1,"stringvalue or string variable"); // 1 for the first question mark
ps.setInt(2,intvalueOrintVariable); // 2 for the second question mark
C#中如何实现这一点?我还不太熟悉
DataSource
,我希望能够通过代码而不是使用C#properties窗口来分配参数

我将感谢任何帮助或实际例子


谢谢

完全可以通过基本字符串连接和替换来构建SQL字符串。但是,对于最简单的测试之外的任何内容,或者如果字符串100%用于您的代码,请不要这样做

在C#中,有一个参数化查询的完整概念。它实际上独立于预先准备好的语句而存在。使用哪一个取决于您使用的数据库,因为它直接与驱动程序一起工作: 使用参数


搜索是一个可以交谈的好朋友,特别是因为他/她是许多此类问题的预言家。您不是第一个在C#中使用“参数化查询”的人。您不会是最后一个。另外,在问题中包括实际的数据源使用情况以获得更好的回答。.OP可能重复表示使用了数据源。@user2864740:通常数据源(其中任何一个)只是将大量SQL命令(添加、删除)包装在您的本机代码中。所以这并不是这个代码有效的参数。但是有很多名为“DataSource”的类,每个类的工作方式都不同。我认为在Parametized Query和PrimeSt声明中考虑的最大区别是,在参数化查询下,该语句是在客户端编写的。没有必要进行“准备”步骤。我发现准备好的语句很难学习和实现,因为与参数化查询不同。OP承认这一点。事实上,他/她问如何在C#中使用Java“PreparedStatement”的等价物。再次说明这一点并不能回答问题。此外,OP正在使用数据源。
 protected void Btn_additem_Click(object sender, EventArgs e)
 {
     String category = "";
     String itemName = Tb_itemname.Text;
     String code = Tb_itemcode.Text;
     String brand = Tb_brand.Text;
     String serial = Tb_serial.Text;
     String capacity = Tb_capacity.Text;
     String version = Tb_version.Text;

     if (Rbl_hardsoft.SelectedValue.Equals("Hardware")) 
     {
         category = "Hardware";
     }
     else if(Rbl_hardsoft.SelectedValue.Equals("Software"))
     {
         category = "Software";
     }

     using (SqlConnection connection = new SqlConnection(connectionString))
     using (SqlCommand command = connection.CreateCommand())
     command.CommandText = "INSERT INTO Contacts ItemMasterData(item_code,item_category, item_name, item_brand,item_serialnumber, item_capacity, item_version) VALUES (@item_code,@item_category, @item_name, @item_brand,@item_serialnumber, @item_capacity, @item_version)";
     command.Parameters.AddWithValue("@item_code", code );
     command.Parameters.AddWithValue("@item_category", category );
     command.Parameters.AddWithValue("@item_name", itemName );
     command.Parameters.AddWithValue("@item_brand", brand );
     .. the rest of parameters...

    connection.Open();
    command.ExecuteNonQuery();
}