Проблема с оператором удаления - PullRequest
1 голос
/ 30 июня 2011
public static void DeleteThreads(int threadID)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("DELETE FROM dbo.Threads");
    sb.Append(" WHERE ThreadsID=@ThreadsID");

    string myConnectionString = AllQuestionsPresented.connectionString;

    using (SqlConnection myConnection = new SqlConnection(myConnectionString))
    {
        myConnection.Open();
        SqlCommand sqlCommand = new SqlCommand(sb.ToString(), myConnection);
        sqlCommand.Parameters.Add("@ThreadsID", SqlDbType.Int);
        sqlCommand.Parameters["@ThreadsID"].Value = threadID;
        sqlCommand.ExecuteNonQuery();

    }
}

Это дает мне эту ошибку:

The DELETE statement conflicted with the REFERENCE constraint "FK_Comments_Threads". The conflict occurred in database "model", table "dbo.Comments", column 'ThreadsID'.

Оператор был прекращен.

Если это исправить эту ошибку:

enter code here  public static void DeleteComments(int threadID)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("DELETE FROM dbo.Comments");
    sb.Append(" WHERE ThreadsID=@ThreadsID");

    string myConnectionString = AllQuestionsPresented.connectionString;

    using (SqlConnection myConnection = new SqlConnection(myConnectionString))
    {
        myConnection.Open();
        SqlCommand sqlCommand = new SqlCommand(sb.ToString(), myConnection);
        sqlCommand.Parameters.Add("@ThreadsID", SqlDbType.Int);
        sqlCommand.Parameters["@ThreadsID"].Value = threadID;
        sqlCommand.ExecuteNonQuery();

    }
}

Ответы [ 6 ]

3 голосов
/ 30 июня 2011

У вас нет пробела, и, похоже, вам не хватает ключевого слова FROM.

Попробуйте:

sb.Append("DELETE FROM dbo.Threads");    
sb.Append(" WHERE ThreadsID=@ThreadsID");

Кроме того, для записи: использование встроенного SQL, как правило, плохо из-за тесной связи вашего приложения с базой данных. Вам следует использовать отдельный уровень доступа к данным, если это приложение предназначено для каких-либо серьезных целей.

2 голосов
/ 30 июня 2011

Просто собери строку, чтобы увидеть, что не так.Результат будет

DELETE dbo.ThreadsWHERE ThreadsID=@ThreadsID

Вам не хватает ключевого слова FROM и пробела после dbo.Threads.

sb.Append("DELETE FROM dbo.Threads ");    
sb.Append("WHERE ThreadsID=@ThreadsID");
2 голосов
/ 30 июня 2011

Вы забыли дать пробел после первого утверждения и забыли добавить ОТ этого.

StringBuilder sb = new StringBuilder();
sb.Append("DELETE FROM  dbo.Threads  ");
sb.Append(" WHERE ThreadsID=@ThreadsID");
2 голосов
/ 30 июня 2011

Включить "От" и пробел

 StringBuilder sb = new StringBuilder();
        sb.Append("DELETE from  dbo.Threads ");
        sb.Append("WHERE ThreadsID=@ThreadsID");
0 голосов
/ 30 июня 2011

ThreadsID, переданный в качестве внешнего ключа для комментариев и других таблиц, необходимо удалить те записи, которые сначала связаны с этим ThreadID.Вы можете установить опцию каскадного удаления в мастер-таблице из SQL Server Management Stidio.

0 голосов
/ 30 июня 2011

Должно быть

DELETE FROM ......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...