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("插入失敗");
}
// 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); // 批量同步修改
using 確保釋放。ExecuteNonQuery 返回受影響行數,0 表示未插入(如主鍵衝突、觸發器回滾)。SqlTransaction 保證原子性。