2015-10-20 28 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(); 
     } 
相关问题