此存储过程。 - 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()) ;
}
}
答案 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能够与sequeLink一起正常工作,驱动程序应该与操作系统的版本匹配,我使用的是Windows 7.0 64位,我的dsn是32位,我使用64位dsn来使用64位操作系统。