我只是在学习c#。我试图在c#windows窗体中制作简单的CRUD,但在那里遇到了一些错误。错误说The ConnectionString property has not been initialized.
下面的代码显示了我的尝试方式。
App.config 与SQL SERVER
<connectionStrings>
<add name="connectionstr" connectionString="Data Source=DESKTOP-F8UCLUB;Initial Catalog=bug_tracker;Integrated Security=True" />
DBConnection 类
class DBConnection
{
private string connectionString = ConfigurationManager.ConnectionStrings["connectionstr"].ConnectionString;
public SqlConnection GetConnection()
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
return connection;
}
}
}
插入功能
public void Insert(Programmer t)
{
conn.Open();
IDbTransaction trans = null;
try
{
conn.BeginTransaction();
SqlCommand sql = new SqlCommand(null, conn);
sql.CommandText = "INSERT INTO tbl_programmer VALUES(@fullName, @username, @password)";
sql.Parameters.AddWithValue("@fullName", t.FullName);
sql.Parameters.AddWithValue("@username", t.Username);
sql.Parameters.AddWithValue("@password", t.Password);
sql.Prepare();
sql.ExecuteNonQuery();
trans.Commit();
}
catch (SqlException ex)
{
trans.Rollback();
throw ex;
}
finally
{
conn.Close();
}
}
答案 0 :(得分:3)
问题是
using
关键字。仅使用using
指令 一次性物品。如果您在使用块中创建任何实例,则该实例将被废弃 花括号..
public SqlConnection GetConnection()
{
SqlConnection connection = new SqlConnection(connectionString);
if (connection.State == ConnectionState.Closed)
connection.Open();
return connection;
}
答案 1 :(得分:1)
SqlConnection
对象因为您在using
内部使用Dispose()
而在其上调用dispose()
,因此会被处置。
如果你要归还某些东西,它一定不能被处理,它必须留在记忆中。
如果你想更多地了解它是如何工作的,那么我会尽我所能:
return语句返回Object的地址,然后返回 {{1}}被调用该对象,现在该地址没有 持有该Object,因此抛出该异常。