2015-10-20 85 views
0

你好我遇到了一個錯誤,使用表值參數。我在這裏找到這個好文章(Article),並說明如何使用它,但是當我運行的代碼,我得到這個錯誤表值參數 - 找不到數據類型dbo.typeQuestionSort

「一欄,參數,或變量@DT:找不到數據類型 dbo.typeQuestionSort。「

我不確定如何解決它。首先,我通過這個代碼創建的數據類型在我的數據庫:

CREATE TYPE [dbo].[typeQuestionSort] AS TABLE(
[typeQuestionID] [int] NOT NULL, 
[typeSortOrder] [int] NOT NULL 
) 
GO 

已成功創建。然後在我的C#應用​​程序,我有這樣的方法來更新我的應用程序在數據庫表中的一些問題的排序順序:

protected void UpdateSortOrder() 
    { 
     DataTable dt = new DataTable("Tim"); 
     dt.Columns.Add(new DataColumn("typeQuestionID", typeof(int))); 
     dt.Columns.Add(new DataColumn("typeSortOrder", typeof(int))); 

     DataRow r1 = dt.NewRow(); 
     r1["typeQuestionID"] = 1; 
     r1["typeSortOrder"] = 0; 
     dt.Rows.Add(r1); 

     try 
     { 
      SqlConnection conn = new SqlConnection(ConnectionString); 
      conn.Open(); 
      using (SqlCommand cmd = conn.CreateCommand()) 
      { 
       SqlParameter p = new SqlParameter("@DT", SqlDbType.Structured); 
       p.Value = dt; 
       p.TypeName = "dbo.typeQuestionSort"; 
       cmd.Parameters.Add(p); 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = 
        "UPDATE tblVQuestions" 
        + " SET [SortOrder] = typeSortOrder" 
        + " FROM @DT" 
        + " WHERE QuestionID = typeQuestionID AND PID = 12 AND SID = 12" 
        + " BEGIN TRY" 
        + " DROP TYPE dbo.typeQuestionSort" 
        + " END TRY" 
        + " BEGIN CATCH" 
        + " END CATCH"; 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     catch 
     { 

     } 

    } 

任何幫助是極大的讚賞。

+5

爲什麼你的C#代碼後刪除該類型?表類型應該是長壽命的對象,不是臨時創建/刪除的。 –

+1

檢查您的類型是否在正確的數據庫中創建? –

+5

此外,您的錯誤「處理」風格不會幫助您找到問題。如果你有空的catch塊,只需刪除整個'try' /'catch'。至少你會看到錯誤,而不是讓應用程序默默吞下它們。 –

回答

0

感謝Damien_The_Unbeliever的評論。

我不知道爲什麼,但文章有用戶刪除表。正如達米恩所言,這應該是一個長期存在的目標。所以我重新創建了表格並刪除了這些內容。現在它奇妙地工作。

此:

 SqlConnection conn = new SqlConnection(ConnectionString); 
     conn.Open(); 
     using (SqlCommand cmd = conn.CreateCommand()) 
     { 
      SqlParameter p = new SqlParameter("@DT", SqlDbType.Structured); 
      p.Value = dt; 
      p.TypeName = "dbo.typeQuestionSort"; 
      cmd.Parameters.Add(p); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = 
       "UPDATE tblVQuestions" 
       + " SET [SortOrder] = typeSortOrder" 
       + " FROM @DT" 
       + " WHERE QuestionID = typeQuestionID AND PID = 12 AND SID = 12" 
       + " BEGIN TRY" 
       + " DROP TYPE dbo.typeQuestionSort" 
       + " END TRY" 
       + " BEGIN CATCH" 
       + " END CATCH"; 
      cmd.ExecuteNonQuery(); 
     } 

成爲本:

 SqlConnection conn = new SqlConnection(ConnectionString); 
     conn.Open(); 
     using (SqlCommand cmd = conn.CreateCommand()) 
     { 
      SqlParameter p = new SqlParameter("@DT", SqlDbType.Structured); 
      p.Value = dt; 
      p.TypeName = "dbo.typeQuestionSort"; 
      cmd.Parameters.Add(p); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = 
       "UPDATE tblVQuestions" 
       + " SET [SortOrder] = typeSortOrder" 
       + " FROM @DT" 
       + " WHERE QuestionID = typeQuestionID AND PID = 12 AND SID = 12"; 
      cmd.ExecuteNonQuery(); 
     } 
相關問題