使用 C# 向 SQL 插入数据
Posted
技术标签:
【中文标题】使用 C# 向 SQL 插入数据【英文标题】:Insert data to SQL using C# 【发布时间】:2020-08-12 00:49:35 【问题描述】:我不断遇到问题
“'System.Data.SqlClient.SqlException' 类型的未处理异常 发生在 System.Data.dll""上 SDA.SelectCommand.ExecuteNonQuery();".
这里有什么问题?
SqlConnection con = new SqlConnection(@"Data Source=LAPTOP-LD5OK96E\SQLEXPRESS;Initial Catalog=TRANSACTION_RATE TABLE; Integrated Security=True");
private void label1_Click(object sender, EventArgs e)
private void button1_Click(object sender, EventArgs e)
con.Open();
String query = "INSERT INTO TRANSACTION_RATE TABLE (Trans_id,Transaction_type,Transact_rate,Transact_description) VALUES('" + textBox1.Text + "','" + textBox2.Text + "''" + textBox3.Text + "''" + textBox4.Text + "')";
SqlDataAdapter SDA = new SqlDataAdapter(query, con);
SDA.SelectCommand.ExecuteNonQuery();
con.Close();
MessageBox.Show("Success!");
【问题讨论】:
我很确定INSERT INTO TRANSACTION_RATE TABLE
不正确。我猜TABLE
是您错误地复制/粘贴的位,但是一旦您修复了该代码,如果该代码投入生产,您仍然会遇到很多麻烦。***.com/questions/332365/…
您的问题中有两个不同的问题。您应该 a) 避免连接字符串,因为这是一种称为 SQL 注入的安全风险;b) 您的“TRANSACTION_RATE TABLE”应该被转义,以便 SQL Server 知道表名是什么。检查这个related answer
【参考方案1】:
您的表名后面有一个杂散的TABLE
关键字,您需要将其删除。作为第二点,您需要注意避免这种字符串连接,并且它对SQL Injection 攻击是开放的:
String query = "INSERT INTO TRANSACTION_RATE (Trans_id,Transaction_type,Transact_rate,Transact_description) VALUES (@Trans_id, @Transaction_type,@Transact_rate, @Transact_description)";
SDA.SelectCommand.Parameters.Add("@Trans_id", SqlDbType.NVarChar, 50).Value = textBox1.Text;
SDA.SelectCommand.Parameters.Add("@Transaction_type", SqlDbType.NVarChar, 50).Value = textBox2.Text;
SDA.SelectCommand.Parameters.Add("@Transact_rate", SqlDbType.NVarChar, 50).Value = textBox3.Text;
SDA.SelectCommand.Parameters.Add("@Transact_description", SqlDbType.NVarChar, 50).Value = textBox4.Text;
如果您的表实际上被命名为 TRANSACTION_RATE TABLE
,您应该像这样转义名称:
INSERT INTO [TRANSACTION_RATE TABLE] ....
【讨论】:
先生,它工作!我所做的是,我将代码回滚到 SqlDataAdapter SDA = new SqlDataAdapter(query, con);和 SDA.SelectCommand.ExecuteNonQuery();。之后就完成了!!我非常感谢你在场,你是最好的先生!以上是关于使用 C# 向 SQL 插入数据的主要内容,如果未能解决你的问题,请参考以下文章