2012-06-12 50 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

相關問題