Параметр таблицы значений - не удается найти тип данных dbo.typeQuestionSort
Здравствуйте, я сталкиваюсь с ошибкой, используя табличные параметры. Я нашел эту хорошую статью здесь ( Article), и она объясняет, как ее использовать, но когда я запускаю код, я получаю эту ошибку
"Столбец, параметр или переменная @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
{
}
}
Любая помощь с благодарностью.
1 ответ
Кредит идет на комментарий 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();
}