我有以下连接字符串:
provider=SQLNCLI11;Server=[server];Database=[db];uid=[uid];pwd=[pwd]
我有以下代码:
OleDbCommand oComm = new OleDbCommand();
oComm.Connection = OleConnection;
oComm.Transaction = m_oleTran;
oComm.CommandText = sSQL;
oComm.CommandTimeout = TimeOut;
BuildParams(ref oComm, sCols, (object [])oVals);
if (oComm.Connection.State == ConnectionState.Closed)
oComm.Connection.Open();
m_RowsAffected = oComm.ExecuteNonQuery();
if (m_oleTran == null)
oComm.Connection.Close();
oComm.Dispose();
private void BuildParams(ref OleDbCommand oComm, string [] sCols, object [] oVals)
{
for (int i = 0; i< sCols.Length; i++)
{
if (sCols.Length > 0)
oComm.Parameters.AddWithValue(sCols[i], oVals[i]);
}
}
当我执行一个简单的更新SQL语句时,出现以下错误
The fractional part of the provided time value overflows the scale of the corresponding SQL Server parameter or column. Increase bScale in DBPARAMBINDINFO or column scale to correct this error. at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
有什么想法吗?
谢谢
使用 VB 语言的 DTSX 脚本任务中使用的解决方案。
出于合规性原因,我们的客户要求我们在数据库版本升级中更改 SQL Server 提供程序。我们在尝试保存日期时开始遇到同样的错误。发送到数据库的日期比例不正确。我们本可以更改数据库中的数据类型,但是在测试了这个非常简单的解决方案后,我们选择不这样做。我们只使用
.ToString("yyyy-MM-dd HH:mm:ss")
并发送一个字符串而不是大小正确的日期,它通过提供程序和数据库并保存没有问题。
提供程序 = SQLNCLI11;
溶液:
com.Parameters.AddWithValue("@COD_INTERFACE", SqlDbType.Int)
com.Parameters.AddWithValue("@COD_SEQUENCIAL", SqlDbType.Int)
com.Parameters.AddWithValue("@DTA_GERACAO", SqlDbType.DateTime)
com.Parameters.AddWithValue("@DTA_IMPORTACAO", SqlDbType.DateTime)
com.Parameters("@COD_INTERFACE").Value = CInt(Dts.Variables("User::intCodigoInterface").Value)
com.Parameters("@COD_SEQUENCIAL").Value = CInt(Dts.Variables("User::intSequencialArquivo").Value)
com.Parameters("@DTA_GERACAO").Value = CDate(Dts.Variables("User::dtaGeracaoArquivo").Value).ToString("yyyy-MM-dd HH:mm:ss")
com.Parameters("@DTA_IMPORTACAO").Value = Now.ToString("yyyy-MM-dd HH:mm:ss")