我正在使用VS.NET 2008和MS SQL server 2005来开发窗体应用程序,但每次我在连接中或在连接后出现新错误,
在我当前的代码中,连接已打开,但在查询事务中之后无法正常工作。也许我在制作新数据库或新数据源时遇到问题也不满足如何获取连接字符串
这是我的代码......
/////////
private void button1_Click(object sender, EventArgs e)
{
try
{
//setData();
string ConnectingString = @"Data Source=SERVER1\SQLEXPRESS;Initial Catalog=Alkawthar;Integrated Security=True;Pooling=False";
qry = "SELECT * FROM Table1";
//reader = db.select_data(qry);
ds1 = new DataSet();
conn = new SqlConnection(ConnectingString);
conn.Open();
MessageBox.Show("connection opened");
da.Fill(ds1,"Workers");
NavigateRecords();
MaxRows = ds1.Tables["Workers"].Rows.Count;
string sql = "SELECT * From tblWorkers";
da = new System.Data.SqlClient.SqlDataAdapter(sql, conn);
conn.Close();
MessageBox.Show("connection closed");
conn.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("exception");
MessageBox.Show(ex.Message);
}
}
/////////////////
Fill会抛出异常,当我使用reader时它会返回null,尽管DB中有数据 感谢
答案 0 :(得分:2)
这里最明显的问题是您在初始化之前访问SqlDataAdapter。这将导致空引用异常。
在执行da = new SqlDataAdapter(...)
之前,请尝试将行da.Fill(...)
移到该行。
编辑:
不,等等!我看到你在那里做了两个查询和两个填充。在进行第一次填充之前,需要初始化SqlDataAdapter。那么你应该摆脱空引用异常。再次编辑:
另外,如评论所示,您无需同时调用SqlConnection.Close
和SqlConnection.Dispose
方法。只要您使用SqlDataAdapter,您甚至不需要在连接上执行SqlConnection.Open
,因为Fill方法将为您完成所有这些操作。只要连接开始关闭,Fill方法将在完成后再次关闭它。
答案 1 :(得分:1)
在我看来,您在初始化之前使用了DataAdapter。你有NullReferenceException
吗?
da.Fill(ds1,"Workers");
// ...
da = new System.Data.SqlClient.SqlDataAdapter(sql, conn);
答案 2 :(得分:1)
一些建议;
试试这个......
string _connStr = @"Data Source=SERVER1\SQLEXPRESS;Initial Catalog=Alkawthar;Integrated Security=True;Pooling=False";
string _query = "SELECT * FROM Workers";
DataSet _ds = new DataSet();
try
{
using (SqlConnection _conn = new SqlConnection(_connStr))
{
SqlDataAdapter _da = new SqlDataAdapter(_query, _conn);
_conn.Open();
_da.Fill(_ds);
}
// insert null dataset or invalid return logic (too many tables, too few columns/rows, etc here.
if (_ds.Tables.Count == 1)
{ //There is a table, assign the name to it.
_ds.Tables[0].TableName = "tblWorkers";
}
//Then work with your tblWorkers
}
catch (Exception ex)
{
Console.Write("An error occurred: {0}", ex.Message);
}