当前此测试窗口窗体应用程序存在问题。构造函数的作用是将数据添加到数据网格视图中。但是,当我单击该按钮时,它无法添加任何内容来运行sql命令,错误为ExecuteNonQuery:Connection属性尚未初始化。下面是我的代码。我发现了类似问题,但它们并没有通过在代码中的多个点调用数据库来解决这个问题。
namespace TestApplication
{
public partial class Form1 : Form
{
public SqlDatabase db;
string myConnectionString = ConfigurationManager.ConnectionStrings["DF06Data_Tools"].ToString();
public Form1()
{
InitializeComponent();
db = new SqlDatabase(myConnectionString);
UpdateGrid();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void UpdateGrid()
{
string sql = "SELECT * FROM [Data_Tools].[dbo].[TestTable]";
DbCommand cmd = db.GetSqlStringCommand(sql);
DataSet TableDataSet = db.ExecuteDataSet(cmd);
dataGridView1.DataSource = TableDataSet.Tables[0];
cmd.Dispose();
}
private void button1_Click(object sender, EventArgs e)
{
string sql = "INSERT INTO [Data_Tools].[dbo].[TESTTABLE] (name, id) VALUES('bob', '8')";
DbCommand cmd = db.GetSqlStringCommand(sql);
cmd.ExecuteNonQuery();
UpdateGrid();
}
}
}
在调用ExecuteNonQuery之前,您需要打开连接。构造函数中的调用打开连接,发出命令,然后为您关闭连接。
来自MSDN:
对ExecuteDataSet的调用打开连接、填充DataSet,并在返回结果之前关闭连接。
同样来自MSDN:
private static void CreateCommand(string queryString,
string connectionString)
{
using (SqlConnection connection = new SqlConnection(
connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}