ASP.. NET存储过程调用不会返回任何行,但在Management Studio中会返回
本文关键字:返回 但在 Management Studio 任何行 调用 NET ASP 存储过程 | 更新日期: 2023-09-27 18:01:59
我有一个难以置信的奇怪的问题,我已经试图解决了将近一天,我现在对砖墙,需要帮助!
我在我的Windows 7 PC上创建了一个。net 4 c#网站,并安装了新安装的SqlServer 2008 Express R2,一切正常。
我已经上传了数据库和网站该网站现在在Windows Web Server 2008 R2(带有service pack 1)上数据库在不同的服务器上运行Windows server 2008 R2标准版和SQL server 2008R2。
网站的其余部分运行良好,连接到数据库很好,除了一个页面,我已经将其缩小到一个存储过程调用,不返回任何行。
我将调用简化为:
DataSet ds = new DataSet();
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConn"].ToString());
SqlCommand cmd = new SqlCommand("MYSP 'param1', param2, param3", conn);
cmd.CommandType = CommandType.Text;
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
Response.Write("ROWS COUNT IN GET DS " + ds.Tables[0].Rows.Count);
conn.Close();
cmd.Dispose();
return ds;
对于上面的任何一个,如果我在本地PC上运行这个数据库的精确副本,它返回2行,如果我直接在Sqlserver Management Studio上运行它,它返回2行,但是如果我通过ASP.net在实时服务器上运行这个,它返回不行!
有谁能透透光吗??!我要疯了!
更新即使我使用命令类型文本,我已经尝试过它作为命令类型存储过程与分隔参数(如下所示),但它没有区别
cmd.CommandType = StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@param1", param1));
cmd.Parameters.Add(new SqlParameter("@param2", param2));
cmd.Parameters.Add(new SqlParameter("@param3", param3));
谢谢大家的评论!
答案是:
网站使用的db用户设置为"British English"(默认)..我没有意识到这一点,因为这是一个新的服务器!
在其他地方用户被设置为"英语",所以将用户更改为英语修复它!
通常要尝试的事情:当您登录到数据库运行查询时,您是否以asp.net进程正在使用的相同用户这样做?您可能会发现,如果使用两个用户,它们的设置可能不同(一个为EN-GB,一个为EN-US),这会给您带来基于日期的奇怪问题。此外,您可能会发现两者的权限不同,因此一个具有tempDb权限,而另一个没有。
如果您调用的是存储过程,则应该将SqlCommand.CommandType
设置为存储过程:
DataSet ds = new DataSet();
using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConn"].ToString()))
using(SqlCommand cmd = new SqlCommand("MYSP 'param1', param2, param3", conn))
{
cmd.CommandType = CommandType.StoredProcedure; <== STORED PROCEDURE !!
......
}
Update:由于您正在执行带有参数的存储过程,因此您可能应该使用以下方式:
using(SqlCommand cmd = new SqlCommand("exec dbo.MYSP 'param1', param2, param3", conn))
然后再次使用CommandType.Text
使用SQL Server Profiler捕捉实际的存储过程调用,因为它是由生产ASP发出的。. NET服务器,然后对您的开发设置执行相同的操作。请确保输入的参数相同。
如果参数在该级别上匹配,那么唯一可能的答案似乎是您的同事的复杂SP具有一些不确定的组件,这些组件正在破坏您的结果。你了解整个SP吗?
好的,狂野的镜头在这里,但我注意到你正在做ds.Tables[0].Rows.Count
,我想知道你的存储过程是否返回多个数据表?到目前为止,最好的答案是@pseudocoder使用分析器来查看实际被调用的内容。我还建议在代码中设置断点,并检查返回的数据集。