0

我编写了一个程序,其中包括从数据库写入和读取。当我运行应用程序并尝试执行写入时,我调用以下方法:

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();
        }
    }

在方法调用之后,我从表中读取所有记录并在表单中显示它们。可以看到刷新之前插入的记录,但是当我退出应用程序并查看表格时,我看不到记录。

有谁知道什么可能导致这种行为?

4

3 回答 3

1

您是否在此之后执行提交?它可能正在运行您的语句,但随后不提交更改并进行隐式回滚。

我认为异常处理看起来很狡猾。除非你能以某种方式实际处理它,否则捕捉东西是没有意义的。框架的顶层是捕获和报告意外异常的地方。

于 2008-10-19T10:38:08.860 回答
0

您是否尝试过将 ExecuteScalar 方法的返回值设置为 int,然后对照表检查值?

执行标量-

执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行被忽略

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
    }
于 2008-10-19T10:43:04.403 回答
0

我发现了问题。我修改了自动生成的连接字符串

connectionString="数据源=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\URSZRDB.mdf;集成安全=True;用户实例=True"

connectionString="数据源=.\SQLEXPRESS;AttachDbFilename=C:\Users\Niko\Documents\Visual Studio 2008\Projects\URSZRWAPChat\URSZRWAPChat\URSZRDB.mdf;集成安全=True;用户实例=True"

现在它可以工作了。

这不是我第一次编写这种程序,到目前为止,一切都很顺利......

于 2008-10-19T10:43:30.767 回答