0

这个存储过程。- SP_insertinfo 向表中插入一个条目。

我通过 ODBC DSN 连接到 informix 数据库。

这是我的代码,这个不会给我一个错误或不插入记录。

我通过 sequeLink 3.10 32 位驱动程序连接,我的应用程序在 64 位操作系统上运行。

试图确定为什么没有插入数据(当我放置断点时,将参数化语句放入实际的数据库中,在那里插入相同的数据,但是从应用程序代码运行时失败)。

int rowsInserted = command.ExecuteNonQuery(); //这一行总是返回-1,并且没有插入数据。

有什么想法/想法会有很大帮助吗?

 private void InsertInfo()
        {
            try
            {

                using(var connection = new OdbcConnection("dsn=mydsn;UID=myusername;PWD=****;"))
                {

                    var command = connection.CreateCommand();
                    command.CommandType = CommandType.StoredProcedure;
                    command.Connection = connection;
                    command.CommandText = "execute procedure SP_insertinfo(?,?)";


                     command.Parameters.Clear();

                     //Insert parameter values


                     var paramId = new OdbcParameter("ID", OdbcType.Int) { Value = Convert.ToInt32(txtID.Text.Trim()) };
                     command.Parameters.Add(paramId);


                     var paramCountry = new OdbcParameter("Country", OdbcType.VarChar, 25) { Value = txtCountry.Text.Trim() };
                     command.Parameters.Add(paramCountry);


                    connection.Open();


                    int rowsInserted = command.ExecuteNonQuery(); //This line is always returning -1 and data doesn't get inserted.

                    if (rowsInserted > 0)
                    {
                        MessageBox.Show("Insert data saved.");
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.ToString()) ;
            }




        }
4

2 回答 2

1

首先尝试将您的过程作为简单语句执行,而不是作为准备好的语句。这看起来像:

command.CommandText = "execute procedure SP_insertinfo(1, 'Poland')";
connection.Open();
int rowsInserted = command.ExecuteNonQuery();

这样,您将看到准备好的语句是否有问题。

尝试execute procedure SP_insertinfo(1, 'Poland')通过dbaccess(Informix 工具)执行。这样您将看到它是否是 ODBC 问题。

如果它不起作用,dbaccess那么您将不得不调试SP_insertinfo。如果它有效,那么问题出在 ODBC 上。然后我建议启用 ODBC 跟踪ODBC Manager并分析它将产生的日志。

于 2013-07-24T08:20:47.507 回答
0

经过长时间的研究,我发现,为了使 ODBC dsn 与 sequeLink 正常工作,驱动程序应该与操作系统的版本相匹配,我使用的是 windows 7.0 64 位,我的 dsn 是 32 位,我使用了64 位 dsn 以便与 64 位操作系统一起使用。

于 2013-07-24T20:15:17.423 回答