【发布时间】:2015-01-18 00:09:31
【问题描述】:
简短背景:我正在用基于 C# 的程序替换一个过时的基于 Visual 的程序。该程序附带了一个基于 Access (JET) 的数据库,该数据库已经在使用中。现在,出于实际原因,我想连接到当前数据库。但是在可预见的将来,我想用 SQL Server 替换它。
问题:数据库使用 Access 'Currency' 数据类型存储财务信息。在 C# 中,我使用“十进制”来表示财务信息。自然,当我尝试使用 INSERT 或 UPDATE 查询将 Decimal 存储在 Currency-field 中时,我会遇到错误(实际上,我遇到过一次错误,它会自动将该特定记录的数据类型更改为 Decimal)。我不确定解决此问题的最佳方法是什么:
- 在我的程序中将小数转换为货币并在之后插入。这甚至可能吗(C# 表示该字段的值是 DBNull 类型,因为它不知道货币)?如果是,我该怎么做?
- 将字段的数据类型更改为十进制。 这样做是否会冒损坏财务信息的风险?
- 还有其他/更好的建议吗?
提前致谢!
确切的错误信息:
System.Data.Odbc.OdbcException (0x80131937): ERROR [07006]
[Microsoft][ODBC Microsoft Access-stuurprogramma]Inbreuk op kenmerk van beperkt gegevenstype
它是荷兰语,翻译成Restricted data type attribute violation
我的更新代码:
public Boolean setFuelCosts(int rentID, Decimal fuelcosts)
{
string conString = lem2;
string queryString = "UPDATE rental SET fuel = ? WHERE rentid = ?";
OdbcCommand command = new OdbcCommand(queryString);
command.Parameters.Add("@fuel", OdbcType.Decimal).Value = fuelcosts;
command.Parameters.Add("@rentid", OdbcType.Int).Value = rentID;
return factory.executeUpdateCommand(conString, command);
}
public Boolean executeUpdateCommand(String conString, OdbcCommand command)
{
bool result = false;
using (OdbcConnection connection = new OdbcConnection(conString))
{
try
{
command.Connection = connection;
command.CommandType = CommandType.Text;
connection.Open();
int i = command.ExecuteNonQuery();
result = (i >= 1);
connection.Close();
}
catch (Exception exc)
{
System.Windows.Forms.MessageBox.Show(exc.Message);
System.Windows.Forms.MessageBox.Show(exc.StackTrace);
}
}
return result;
}
【问题讨论】:
-
您尝试插入值的代码示例以及收到的确切错误消息将在此处提供很大帮助(Access 版本?)
-
您是否尝试将变量作为类型发送:OleDbType.Currency?
-
我已经添加了我的代码和错误消息。 Access 版本是 97(就像我说的,已经过时了)。 @OmerBTW:我用的是Odbc,所以恐怕不行。
标签: c# ms-access type-conversion