通过odbc连接的Informix数据库 - 插入存储过程的问题

时间:2013-07-23 22:40:24

标签: c# .net odbc informix

此存储过程。 - SP_insertinfo在表中插入一个条目。

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

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

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

尝试确定数据未插入的原因(当我放置一个断点时,将参数化语句放入实际的DB中,它会插入相同的数据,但是从应用程序代码运行时会失败)。

  

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




        }

2 个答案:

答案 0 :(得分:1)

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

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

通过这种方式,您将看到准备好的陈述是否有问题。

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

如果它不适用于dbaccess,则必须调试SP_insertinfo。如果它工作,那么问题在于ODBC。然后我建议在ODBC Manager中启用ODBC跟踪并分析它将生成的日志。

答案 1 :(得分:0)

经过长时间的研究,我发现,为了使ODBC dsn能够与sequ​​eLink一起正常工作,驱动程序应该与操作系统的版本匹配,我使用的是Windows 7.0 64位,我的dsn是32位,我使用64位dsn来使用64位操作系统。