我尝试做的是使用C#在ASP.Net上生成一个文本文件。通过执行存储过程从数据库中检索数据。我确保存储过程通过在SQL Server Mangement Studio中执行它来返回值。我实际上能做到这一点。
我首先将所有相关表格转换为视图,然后使用存储过程从该视图中获取数据。然后将该数据生成到ASP.Net中的文本文件中。使用以下代码:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Name"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("Stored Procedure Name", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter myAdapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
myAdapter.Fill(dt);
System.Text.StringBuilder strResult = new System.Text.StringBuilder("");
string createtext = (Server.MapPath("./Feeds/") + "feed.txt");
StreamWriter w = File.CreateText(createtext);
w.Flush();
w.Close();
我确保每个视图都返回值(在SQL Server Management Studio中)。
但问题是并非所有存储过程都返回ASP.Net上的值我只获得空白文本文件,尽管所有存储过程都在SQL Server Management Studio中返回了一些值。
我只在存储过程中使用简单的select语句,如
select Somthing
from View_Name
此查询在Management Studio中返回一些值,但不返回ASP.Net(对于某些存储过程)。
这个问题可能是什么问题?请帮忙
答案 0 :(得分:3)
我看不到您在DataTable中获取数据的位置并将其放入文本文件中。
编辑:
由于您已在评论中显示了您的代码:
您似乎正在吞咽您的例外情况。如果您只是为了简洁而离开代码,但如果没有,那么您可能会在catch语句中隐藏错误,因为您没有执行任何异常操作。
例如,您可能在SP或View上遇到权限问题但不知道。
如果情况并非如此,那么: 调试/为此代码添加断点以查看数据表是否包含数据。
您还可以使用SQL事件探查器查看从代码中获取SQL Server的内容。
答案 1 :(得分:2)
除了显而易见的事实,即您没有使用从数据库中检索的数据,如果抛出异常,您的代码可能会泄漏资源。它应该写成如下,以避免:
using (SqlConnection conn = new SqlConnection(
ConfigurationManager.ConnectionStrings["Name"].ConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("Stored Procedure Name", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
using (SqlDataAdapter myAdapter = new SqlDataAdapter(cmd))
{
using (DataTable dt = new DataTable())
{
myAdapter.Fill(dt);
}
}
}
}
System.Text.StringBuilder strResult = new System.Text.StringBuilder("");
string createtext = (Server.MapPath("./Feeds/") + "feed.txt");
using (StreamWriter w = File.CreateText(createtext))
{
// Do something with w
w.Flush();
}
答案 2 :(得分:0)
您是否为此代码调试/添加了断点以查看数据表是否包含数据?您是否吞下任何异常(从您的代码片段看起来有点类似)?例如,您是否对这些SP和/或视图中的一些具有权限问题。您还可以使用SQL事件探查器查看从代码中获取SQL Server的内容
谢谢你们。我回去了,真的看了我正在使用的视图。正如我前面提到的,一些stroed程序会返回文本文件的数据,有些则不会。
在我的情况下,似乎从涉及用户定义函数的视图中重新获取数据的存储过程将返回空白文件。(我面临的问题) 对于那个特定的存储过程;此代码后,数据表为空:myAdapter.Fill(dt);这解释了为什么我得到了空白文本。
我也研究过SQL Profiler,它在点击ASP.Net上的“生成文本”按钮后确实执行了存储过程。但是没有返回数据。
UDF是否可能导致我的问题。 该问题是否与UDF权限有关。我认为许可可能是问题的原因。 如何向ASP.Net授予权限以便能够从包含UDF的存储过程中获取数据。
注意:UDF由其他开发人员创建。
谢谢。 AEIN