嘿伙计我的代码上有这个错误,但似乎在其他新项目上工作,它总是突出显示ExecuteNonQuery。 我试图用谷歌和这个网站搜索解决方案,但我真的不知道为什么它有错误。
我也在mssql express中使用。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace AssetInsert
{
public partial class AssetInsert : Form
{
public AssetInsert()
{
InitializeComponent();
}
private void ICButton_Click(object sender, EventArgs e)
{
DBConn.DBOpen();
lbConnTest.Text = "OK";
DBConn.DBClose();
}
private void ISaveButton_Click(object sender, EventArgs e)
{
string sql = (@"INSERT INTO dbo.HWTable(Brand, CPU, RAM, HSerial, Model, ACode, PYear, UName, Position, Depart) VALUES('" + BrandCBox.Text + "', '" + CPUTBox.Text + "', '" + RAMTBox.Text + "', '" + HSerialTBox.Text + "', '" + ModelTBox.Text + "', '" + ACodeTBox.Text + "', '" + PYearPicker.Text + "', '" + UNameTBox.Text + "', '" + PositionCBox.Text + "', '" + DepartCBox.Text + "');");
SqlCommand cmd = new SqlCommand(sql);
DBConn.DBOpen();
cmd.Parameters.AddWithValue("@Brand", BrandCBox.Text);
cmd.Parameters.AddWithValue("@CPU", CPUTBox.Text);
cmd.Parameters.AddWithValue("@RAM", RAMTBox.Text);
cmd.Parameters.AddWithValue("@HSerial", HSerialTBox.Text);
cmd.Parameters.AddWithValue("@Model", ModelTBox.Text);
cmd.Parameters.AddWithValue("@ACode", ACodeTBox.Text);
cmd.Parameters.AddWithValue("@PYear", PYearPicker.Text);
cmd.Parameters.AddWithValue("@UName", UNameTBox.Text);
cmd.Parameters.AddWithValue("@Position", PositionCBox.Text);
cmd.Parameters.AddWithValue("@Depart", DepartCBox.Text);
cmd.ExecuteNonQuery(); //<--error here
DBConn.DBClose();
}
public class DBConn
{
public static void DBOpen()
{
string source = @"Data Source = 10.201.0.17; Initial Catalog = ITinven; USER ID = sa; PASSWORD = jc9989;";
SqlConnection conn;
conn = new SqlConnection(source);
conn.Open();
}
public static void DBClose()
{
string source = @"Data Source = 10.201.0.17; Initial Catalog = ITinven; USER ID = sa; PASSWORD = jc9989;";
SqlConnection conn;
conn = new SqlConnection(source);
conn.Close();
}
}
}
答案 0 :(得分:7)
错误消息已清除;
连接属性尚未初始化
连接您的SqlComamnd
和SqlConnection
喜欢;
SqlCommand cmd = new SqlCommand(sql, conn);
奇怪的是,您使用字符串连接添加插入值,但您也尝试将它们添加为参数。阅读:Give me parameterized SQL, or give me death。而且您不需要DBOpen
和DBClose
这样的方法。
作为最佳做法,请使用using
statement来处理您的SqlComamnd
和SqlConnection
,而不是手动调用.Close()
方法,并停止使用AddWithValue
} 方法。 可能会产生意外结果。请改用.Add()
method或它的重载。
阅读:Can we stop using AddWithValue()
already?
using(SqlConnection conn = new SqlConnection(source))
using(SqlCommand cmd = conn.CreateCommand())
{
// Set your CommandText property with parameterized way.
// Add your parameters with .Add() method
// Open your connection
// Execute your query.
}
如果您的代码中出现任何错误消息或异常,请仔细阅读 。还有一次,还有一次......这使很多更容易解决你的问题。
答案 1 :(得分:0)
(1)传递参数的正确方法
(2)始终使用try-catch块
(3)使用sqlcommand text和sql connection初始化Sqlcommand的正确方法。
// see how parameters are used
SqlCommand sqlcommand0;
using (SqlConnection conn = new SqlConnection(con_str))
{
conn.Open();
string sql = "INSERT INTO dbo.HWTable(Brand, CPU, RAM, HSerial, Model, ACode, PYear, UName, Position, Depart) VALUES(@Brand, @CPU, @RAM, @HSerial, @Model, @ACode, @PYear, @UName, @Position, @Depart)"; // (1)
try // (2)
{
using (sqlcommand0 = new SqlCommand(commandtext, conn)) // (3)
{
sqlcommand0.Parameters.Add(new SqlParameter("@Brand", Brand.Text));
sqlcommand0.Parameters.Add(new SqlParameter("@CPU", CPU.Text));
....
sqlcommand0.ExecuteNonQuery();
}
}
catch
{
Console.WriteLine("Count not insert data into table.");
}
}