您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> .NET >> C#调用MSSQL2008中存储过程,输出参数没被赋值

C#调用MSSQL2008中存储过程,输出参数没被赋值

来源:网络整理     时间:2016/5/20 17:17:36     关键词:mssql2008

关于网友提出的“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

相关图片

相关文章