我已经花了好几个小时在我的代码中找到一个错误,它杀了我,我找不到它。
在调试模式下运行Visual Studio时,我可以看到DataTable只是空的。我测试了Sql,它找到了数据。
下面是调试屏幕,程序和数据库表。
我希望有人可以让我朝着正确的方向前进。
调试屏幕截图
该计划
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class DebugTestPage : System.Web.UI.Page
{
public string QsId;
public string QsModel;
protected void Page_Load(object sender, EventArgs e)
{
//Til Debugging
QsModel = "Category";
QsId = "2";
//QsModel = "Thread";
//QsId = "1";
////Til debugging
//Response.Write(GetEditDataFromDb(QsModel, QsId));
DataTable NewDT = GetEditDataFromDb(QsModel, QsId);
Response.Write(NewDT);
}
public static DataTable GetEditDataFromDb(string QsModel, string QsId)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
switch (QsModel)
{
case "Category":
cmd.CommandText = "GetCategoryTableDataSP";
break;
case "Thread":
cmd.CommandText = "GetThreadAndFirstPostSP";
break;
//case "Post":
// cmd.CommandText = "GetPostEditDataSP";
// break;
//case "User":
// cmd.CommandText = "GetUserEditDataSP";
// break;
}
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = Convert.ToInt32(QsId);
cmd.Connection = conn;
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();
return dt;
}
存储Procudere
// CREATE PROCEDURE [dbo].[GetCategoryTableDataSP]
// (
// @Id int
// )
//AS
//BEGIN
//SELECT * FROM Category WHERE Category.Id = @Id
//END
DB-表
更新 我已经尝试将数据表绑定到gridview而不是页面上的Response.Write(),它将数据写入页面。 我想它不可能只使用Response.Write(DataTable),所以我好像发现了这个bug。 如果有人有更好的解释,我会打开这个问题。
我也不明白,为什么调试显示数据表“dt”值(参见上面的调试截图)为空。根据{{3}},它应该显示数据表。