使用 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 插入数据的主要内容,如果未能解决你的问题,请参考以下文章

使用C#向ACCESS中插入数据(仅供参考)

C# 无法向Oracle数据库插入数据

sql如何同时向两张表插入数据

C# 后台如何向SQL数据库中插入一定时间范围内的随机日期值,到日就可以!!

sql如何同时向两张表插入数据

C# 向Access数据库插入数据时提示INSERT INTO语法错误