代码之家  ›  专栏  ›  技术社区  ›  Niko Gamulin

无法将记录插入表中

  •  0
  • Niko Gamulin  · 技术社区  · 16 年前

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

    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 回复  |  直到 13 年前
        1
  •  1
  •   WW.    16 年前

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

    我认为异常处理看起来是不可靠的。除非你能以某种方式处理,否则抓东西是没有意义的。框架的顶层是捕获和报告意外异常的地方。

        2
  •  0
  •   Russ Cam    16 年前

    是否尝试将ExecuteEscalar方法的返回值设置为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
        }
    
        3
  •  0
  •   Oleks    13 年前

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

    connectionString=“数据 source=\sqlexpress;attachdbfilename=datadirectory \urszrdb.mdf;集成 安全性=真;用户实例=真”

    具有

    connectionString=“数据 source=\sqlexpress;attachdbfilename=c:\users\niko\documents\visual Studio 2008 \项目\urszrwapchat \urszrwapchat \urszrdb.mdf;集成 安全性=真;用户实例=真”

    现在它开始工作了。

    这不是我第一次写这种程序,到目前为止,一切都进展顺利…