【问题标题】:Insert data to SQL using C#使用 C# 向 SQL 插入数据
【发布时间】: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 是您错误地复制/粘贴的位,但是一旦您修复了该代码,如果该代码投入生产,您仍然会遇到很多麻烦。stackoverflow.com/questions/332365/…
  • 您的问题中有两个不同的问题。您应该 a) 避免连接字符串,因为这是一种称为 SQL 注入的安全风险;b) 您的“TRANSACTION_RATE TABLE”应该被转义,以便 SQL Server 知道表名是什么。检查这个related answer

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


【解决方案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();。之后就完成了!!我非常感谢你在场,你是最好的先生!
猜你喜欢
  • 2017-10-24
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2011-10-28
  • 1970-01-01
相关资源
最近更新 更多