【发布时间】:2014-08-16 04:55:49
【问题描述】:
我有一个 C# 应用程序,它接收来自不同客户端的数据并将该数据插入 SQL Server。我每秒获取数据,甚至更快,但我的代码遇到了一些问题:
static SqlConnection objSqlConn = null;
static SqlCommand objSqlCmd = null;
public static void SaveClientHistory(String strMessage, String strClientIP)
{
try
{
using (objSqlConn = new SqlConnection(strConnectionString))
{
using (objSqlCmd = new SqlCommand("procInsertHistory", objSqlConn))
{
objSqlCmd.CommandTimeout = 0;
objSqlCmd.CommandType = CommandType.StoredProcedure;
objSqlCmd.Parameters.AddWithValue("@strMessage", strMessage);
objSqlCmd.Parameters.AddWithValue("@strClientIP", strClientIP);
objSqlConn.Open();
objSqlCmd.ExecuteNonQuery();
}
}
}
catch (Exception Ex)
{
throw Ex;
}
finally
{
if(objSqlConn != null && objSqlConn.State != ConnectionState.Closed)
{
objSqlConn.Close();
objSqlConn.Dispose();
}
}
}
发生了不同类型的异常:
连接没有关闭。连接的当前状态为正在连接。
内部连接致命错误。
ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态为正在连接。
如果上面的代码有任何错误,请告诉我或建议任何其他方式来完成此任务。
谢谢
【问题讨论】:
-
请检查您是否错过了帖子中的一些细节,例如“我的应用程序并行处理多个请求”或“我不知道
static是什么意思,需要解释”——它会让更容易诊断问题并提供修复。 -
旁注:您能否也评论一下为什么代码需要关闭连接 3 次(
using、.Close和.Dispose在finally块中调用)。 -
快到多快?
-
我建议你使用 ORM,例如 MicrosoftEntityFrameWork OR Telerik OpenAcess
-
@Kyle... 快速意味着将近 200 个客户端以秒为间隔发送数据,应用程序应该能够在 SQL 中接收和存储数据。
标签: c# sql sql-server-2008