首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 向 SQL Server 插入數據無反應?SqlDataAdapter 不執行 INSERT,需用 SqlCommand.ExecuteNonQuery

     編輯:程式設計綜合問答

錯誤代碼

SqlDataAdapter myda = new SqlDataAdapter(sql, conn);
// 缺少執行語句!
myconn.Close();

根本原因

SqlDataAdapter 設計用於填充 DataSet/DataTable(SELECT),其 Fill 方法不執行 INSERT/UPDATE/DELETE。插入數據必須用 SqlCommand.ExecuteNonQuery。

正確代碼

string connStr = "Server=.;Database=13rj;Trusted_Connection=SSPI";
string sql = "INSERT INTO rj13_basic(xm,xh,xb,lxfs) VALUES(@xm,@xh,@xb,@lxfs)";

using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand(sql, conn)) {
    // 參數化防注入
    cmd.Parameters.AddWithValue("@xm", textBox1.Text);
    cmd.Parameters.AddWithValue("@xh", textBox2.Text);
    cmd.Parameters.AddWithValue("@xb", textBox3.Text);
    cmd.Parameters.AddWithValue("@lxfs", textBox4.Text);

    conn.Open();
    int rows = cmd.ExecuteNonQuery(); // 返回影響行數
    if (rows > 0) MessageBox.Show("插入成功");
    else MessageBox.Show("插入失敗");
}

SqlDataAdapter 正確用法(查詢+更新)

// 1. 查詢填充
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Table", conn);
DataTable dt = new DataTable();
adapter.Fill(dt);

// 2. 修改 DataTable
dt.Rows[0]["Col"] = "NewVal";

// 3. 更新回數據庫(需配置 Insert/Update/DeleteCommand)
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Update(dt); // 批量同步修改

避坑指南

  • 不要拼接 SQL:參數化查詢防注入、自動處理類型轉換。
  • using 塊自動釋放:連接、命令、讀取器全部用 using 確保釋放。
  • 檢查返回值:ExecuteNonQuery 返回受影響行數,0 表示未插入(如主鍵衝突、觸發器回滾)。
  • 事務控制:多表操作用 SqlTransaction 保證原子性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved