MVC SQL 连接初始化
MVC SQL connection initialization
我正在处理编辑 SQL 数据库 table 的 MVC 网页。在我的控制器中,我有一个数据库调用来增加一个实体 table。然后,如果成功,则在我的目标 table(不是实体 table)中创建一个新行。
我 运行 遇到的问题是我不断收到以下错误:
The ConnectionString property has not been initialized.
然而,这只会在实体 table 递增之后发生。不知道从哪里开始,所以我希望通过发布一些代码,有人能够帮助我找到我的错误。
所以这是强制性代码:
我的 SQL 连接:
private SqlConnection con;
public BaseRepository()
{
con = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerConnection"].ToString());
}
我的实体Table增量调用:
public int GetNextId()
{
try
{
using (con)
{
DynamicParameters dynParam= new DynamicParameters();
dynParam.Add("@entity_name", "insert_object ");
con.Open();
var value = con.Execute(SP_GET_NEW_ID, dynParam, commandType: CommandType.StoredProcedure);
con.Close();
return value;
}
}
catch (Exception ex) { throw ex; }
}
最后,这是行插入代码:
public int InsertRowCode(InsertObject ccModel, UserModel appUser)
{
var value = GetNextId();
if (value == 1)
{
try
{
using (con)
//this is where the code breaks and jumps the the exception ex in my catch
{
con.Open();
var dP = new DynamicParameters();
//(add 14 dynamic Parameters here)
var result = con.Execute(SP_SAVE_CORRECTION_CODES, dP, commandType: CommandType.StoredProcedure);
con.Close();
return result;
}
}
catch (Exception ex)
{
throw ex;
}
}
else { throw new Exception("Busted"); }
}
非常感谢任何帮助。 TIA
不要使用共享连接对象。
当您退出此区块时:
using (con)
{
//...
}
该连接对象现在 已处理,不能再使用。不要担心尝试优化您的连接,连接池已经做得很好。在您需要的地方创建您的连接对象,使用它们,并将它们放置在一个狭窄的范围内:
using (var con = new SqlConnection(connectionString))
{
//...
}
作为旁注,这是多余的:
catch (Exception ex)
{
throw ex;
}
catch
块没有为您做任何事情,实际上是在删除有关异常的重要信息。完全删除 try/catch。
另一方面,如果您 do 想要在重新抛出异常之前做一些异常,只需单独使用关键字 throw
:
catch (Exception ex)
{
// log something, etc.
throw;
}
这将允许异常继续向上堆栈 未修改,保留实际的错误信息。
我正在处理编辑 SQL 数据库 table 的 MVC 网页。在我的控制器中,我有一个数据库调用来增加一个实体 table。然后,如果成功,则在我的目标 table(不是实体 table)中创建一个新行。 我 运行 遇到的问题是我不断收到以下错误:
The ConnectionString property has not been initialized.
然而,这只会在实体 table 递增之后发生。不知道从哪里开始,所以我希望通过发布一些代码,有人能够帮助我找到我的错误。
所以这是强制性代码:
我的 SQL 连接:
private SqlConnection con;
public BaseRepository()
{
con = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerConnection"].ToString());
}
我的实体Table增量调用:
public int GetNextId()
{
try
{
using (con)
{
DynamicParameters dynParam= new DynamicParameters();
dynParam.Add("@entity_name", "insert_object ");
con.Open();
var value = con.Execute(SP_GET_NEW_ID, dynParam, commandType: CommandType.StoredProcedure);
con.Close();
return value;
}
}
catch (Exception ex) { throw ex; }
}
最后,这是行插入代码:
public int InsertRowCode(InsertObject ccModel, UserModel appUser)
{
var value = GetNextId();
if (value == 1)
{
try
{
using (con)
//this is where the code breaks and jumps the the exception ex in my catch
{
con.Open();
var dP = new DynamicParameters();
//(add 14 dynamic Parameters here)
var result = con.Execute(SP_SAVE_CORRECTION_CODES, dP, commandType: CommandType.StoredProcedure);
con.Close();
return result;
}
}
catch (Exception ex)
{
throw ex;
}
}
else { throw new Exception("Busted"); }
}
非常感谢任何帮助。 TIA
不要使用共享连接对象。
当您退出此区块时:
using (con)
{
//...
}
该连接对象现在 已处理,不能再使用。不要担心尝试优化您的连接,连接池已经做得很好。在您需要的地方创建您的连接对象,使用它们,并将它们放置在一个狭窄的范围内:
using (var con = new SqlConnection(connectionString))
{
//...
}
作为旁注,这是多余的:
catch (Exception ex)
{
throw ex;
}
catch
块没有为您做任何事情,实际上是在删除有关异常的重要信息。完全删除 try/catch。
另一方面,如果您 do 想要在重新抛出异常之前做一些异常,只需单独使用关键字 throw
:
catch (Exception ex)
{
// log something, etc.
throw;
}
这将允许异常继续向上堆栈 未修改,保留实际的错误信息。