关于网友提出的“C#调用MSSQL2008中存储过程,输出参数没被赋值”问题疑问,本网通过在网上对“C#调用MSSQL2008中存储过程,输出参数没被赋值”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:C#调用MSSQL2008中存储过程,输出参数没被赋值
描述:数据库c#存储
1:部分代码如下:
private bool CreateDataTable( SqlConnection sqlConnection, string dataTableName,string commandStr)//判断表是否存在及创建表
{
if (sqlConnection.State == ConnectionState.Closed)
{
try
{
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand("IsTableExist", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("dataTableName", SqlDbType.VarChar, 50);
sqlCommand.Parameters["dataTableName"].Value = dataTableName;
sqlCommand.Parameters["dataTableName"].Direction = ParameterDirection.Input;
sqlCommand.Parameters.Add("IsExist", SqlDbType.VarChar, 50);
sqlCommand.Parameters["IsExist"].Direction = ParameterDirection.Output;
sqlCommand.ExecuteNonQuery();
if (sqlCommand.Parameters["IsExist"].Value.ToString() == "false")
{
sqlCommand = new SqlCommand(commandStr, sqlConnection);
sqlCommand.ExecuteNonQuery();
return true;
}
else
{
return true;
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
else
{
try
{
SqlCommand sqlCommand = new SqlCommand("IsTableExist", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("dataTableName", SqlDbType.VarChar, 50);
sqlCommand.Parameters["dataTableName"].Value = dataTableName;
sqlCommand.Parameters["dataTableName"].Direction = ParameterDirection.Input;
sqlCommand.Parameters.Add("IsExist", SqlDbType.VarChar, 50);
sqlCommand.Parameters["IsExist"].Direction = ParameterDirection.Output;
sqlCommand.ExecuteNonQuery();
if (sqlCommand.Parameters["IsExist"].Value.ToString() == "false")
{
sqlCommand = new SqlCommand(commandStr, sqlConnection);
sqlCommand.ExecuteNonQuery();
return true;
}
else
{
return true;
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
}
2:存储过程中有一个输出参数"IsExist",当频繁调用“CreateDataTable()方法”时(平均200ms左右);CreateDataTable()方法就会报错,提示“IsExist”没有初始化;且在程序调用CreateDataTable()方法时打开数据库系统管理软件,报错概率很高。
3:数据库是MSSQL2008 64位 开发版 C#
解决方案1: 话说,这种情况下,先存文件比较好,然后SQL Server后台批量处理文件,比你这样实时处理频繁请求的效果好得多。
而且,即使你数据量大,也不一定非要每天建一张新表啊,就在原来的表上做分区,建立已分区表,你按照月或者天预先分区,这样处理起来,比你每天建表的效果好得多,查询上也不会有多个表或者动态SQL拼接的问题。
解决方案2: 200ms调用一次,这个频率的确有点高。
这是什么应用....需要这么高的频率要求。
解决方案3: SQL Server 存储过程的参数都要加前缀@。
看这样的代码都醉了,简化一下。
private bool CreateDataTable( SqlConnection sqlConnection, string dataTableName,string commandStr)
{
try
{
if (sqlConnection.State == ConnectionState.Closed)
{
sqlConnection.Open();
}
SqlCommand sqlCommand = new SqlCommand("IsTableExist", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("@dataTableName", SqlDbType.VarChar, 50);
sqlCommand.Parameters["@dataTableName"].Value = dataTableName;
sqlCommand.Parameters["@dataTableName"].Direction = ParameterDirection.Input;
sqlCommand.Parameters.Add("@IsExist", SqlDbType.VarChar, 50);
sqlCommand.Parameters["@IsExist"].Direction = ParameterDirection.Output;
sqlCommand.ExecuteNonQuery();
if (sqlCommand.Parameters["@IsExist"].Value.ToString() == "false") //还有你确定返回的是小写字符?没有大小写?不是0/1?
{
sqlCommand = new SqlCommand(commandStr, sqlConnection);
sqlCommand.ExecuteNonQuery();
return true;
}
else
{
return true;
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
以上介绍了“C#调用MSSQL2008中存储过程,输出参数没被赋值”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1197650.html