2012-06-12 45 views
0

在我的asp项目中,我需要使用TVP将列表框中的所有项目列表写入数据库表格。我有列表框,存储过程(通过TVP - 表值参数)。主要问题是传递DataTable是NULL,但Session不是。我会把你的代码格式aspx.cs文件发给你(只有一个区块,如果你需要更多,请告诉我)。如何将会话传递给DataTable?

protected void ASPxButton1_Click(object sender, EventArgs e) 
{ 
    //DataTable dts = Session["SelectedOptions"] as DataTable; 

    DataTable _dt; 
    //_dt = new DataTable("Items"); 
    _dt = Session["SelectedOptions"] as DataTable; 
    _dt.Columns.Add("Id", typeof(int)); 
    _dt.Columns.Add("Name", typeof(string)); 

    foreach (ListEditItem item in lbSelectedOptions.Items) 
    { 
     DataRow dr = _dt.NewRow(); 
     dr["Id"] = item.Value; 
     dr["Name"] = item.Text; 
    } 
    SqlConnection con; 
    string conStr = ConfigurationManager.ConnectionStrings["TestConnectionString2"].ConnectionString; 
    con = new SqlConnection(conStr); 
    con.Open(); 

    using (con) 
    { 
     SqlCommand sqlCmd = new SqlCommand("TestTVP", con); 
     sqlCmd.CommandType = CommandType.StoredProcedure; 
     SqlParameter tvpParam = sqlCmd.Parameters.AddWithValue("@testtvp", _dt); 
     tvpParam.SqlDbType = SqlDbType.Structured; 
     sqlCmd.ExecuteNonQuery(); 
    } 
    con.Close(); 

} 

编辑

Debugging Screenshot

回答

1

您不添加新行到DataTable。你需要的东西是这样的:

foreach (ListEditItem item in lbSelectedOptions.Items) 
{ 
    DataRow dr = _dt.NewRow(); 
    dr["Id"] = item.Value; 
    dr["Name"] = item.Text; 

    _dt.Rows.Add(dr); 
} 

次要关心的是你在哪里初始化Session["SelectedOptions"]?看来每次单击ASPxButton1时,代码都会尝试向其添加Id和Name列,即使它已经包含这两列。看起来更合乎逻辑的做这样的事情:

_dt = Session["SelectedOptions"] as DataTable; 
if (_dt == null) 
{ 
    _dt = new DataTable("Items"); 
    _dt.Columns.Add("Id", typeof(int)); 
    _dt.Columns.Add("Name", typeof(string)); 
    Session.Add("SelectedOptions", _dt); 
} 
+0

Thans为您的解决方案,但我的主要问题仍然出现。在Session.Add(“SelectedOptions”,_dt); - _dt为NULL。可能是什么原因?在我之前发布的代码中,情况是一样的。会话不为空,它充满了选定的项目,但DataTable为空。我想这是不适合sesiion数据表.... – Marianna

+0

你有没有实现我的第二位代码?仅仅因为你的Session不为空并不意味着'Session [“SelectionOptions”]'也不为空。在我的代码中,当你进入Session.Add(“SelectedOptions”,_dt)时,_dt不可能是null! – GarethD

+0

是的,我实现了代码的第二位,通过调试,_dt为空。但会话[“SelectionOptions”] - 不是 – Marianna

相关问题