не могу вставить запись в таблицу - PullRequest
0 голосов
/ 19 октября 2008

Я написал программу, которая включает в себя запись и чтение из базы данных. Когда я запускаю приложение и пытаюсь выполнить запись, я вызываю следующий метод:

public static void AddMessage(string callID, string content)
    {
        string select =
            "INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime)";
        SqlCommand cmd = new SqlCommand(select, conn);
        cmd.Parameters.AddWithValue("callId", callID.ToString());
        cmd.Parameters.AddWithValue("content", content);
        cmd.Parameters.AddWithValue("insertTime", "10.10.2008");
        try
        {
            conn.Open();
            cmd.ExecuteScalar();
        }
        catch(Exception ex)
        {
            string sDummy = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
    }

После вызова метода я читаю все записи из таблицы и отображаю их в форме. Запись, вставленная перед обновлением, видна, но затем, когда я выхожу из приложения и смотрю на таблицу, я не вижу записи.

Кто-нибудь знает, что может вызвать такое поведение?

Ответы [ 3 ]

1 голос
/ 19 октября 2008

Выполняете ли вы коммит после этого? Это может быть выполнение вашего оператора, но затем не фиксация изменений и неявный откат.

Я думаю, что обработка исключений выглядит хитроумно. Нет смысла что-то ловить, если вы не справитесь с этим каким-либо образом. Верхний уровень вашей платформы - это место для обнаружения и сообщения о непредвиденных исключениях.

0 голосов
/ 19 октября 2008

Я нашел проблему. Я изменил автоматически сгенерированную строку подключения

ConnectionString = "Data Источник = \ SQLEXPRESS;. AttachDbFilename = | DataDirectory | \ URSZRDB.mdf Интегрированное Security = True; пользовательский экземпляр = True "

с

ConnectionString = "Данные Источник = \ SQLEXPRESS; AttachDbFilename = C:. \ Users \ Niko \ Documents \ Визуальное Studio 2008 \ Projects \ URSZRWAPChat \ URSZRWAPChat \ URSZRDB.mdf; Интегрированный Security = True; пользовательский экземпляр = True "

и теперь это работает.

Я не первый раз пишу такую ​​программу, и пока все идет хорошо ...

0 голосов
/ 19 октября 2008

Вы пытались установить для возвращаемого значения метода ExecuteScalar значение int и затем проверить значение по таблице?

ExecuteScalar -

Выполняет запрос и возвращает первый столбец первой строки в наборе результатов, возвращенных запросом. Дополнительные столбцы или строки игнорируются

public static int AddMessage(string callID, string content)
    {
        Int32 newProdID = 0
        string select =
            "INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime); SELECT CAST(scope_identity() AS int);";
        SqlCommand cmd = new SqlCommand(select, conn);
        cmd.Parameters.AddWithValue("callId", callID.ToString());
        cmd.Parameters.AddWithValue("content", content);
        cmd.Parameters.AddWithValue("insertTime", "10.10.2008");
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch(Exception ex)
        {
            string sDummy = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return (int)newProdID
    }
...