C#调试:DataTable不返回值。无法找到错误

时间:2014-03-08 15:31:44

标签: c# sql stored-procedures datatable visual-studio-debugging

我已经花了好几个小时在我的代码中找到一个错误,它杀了我,我找不到它。

在调试模式下运行Visual Studio时,我可以看到DataTable只是空的。我测试了Sql,它找到了数据。

下面是调试屏幕,程序和数据库表。

我希望有人可以让我朝着正确的方向前进。

调试屏幕截图

Debugscreen

该计划

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-表

Database table

更新 我已经尝试将数据表绑定到gridview而不是页面上的Response.Write(),它将数据写入页面。 我想它不可能只使用Response.Write(DataTable),所以我好像发现了这个bug。 如果有人有更好的解释,我会打开这个问题。

我也不明白,为什么调试显示数据表“dt”值(参见上面的调试截图)为空。根据{{​​3}},它应该显示数据表。

0 个答案:

没有答案