Краткая информация: Я заменяю устаревшую, основанную на Visual Basic программу на основе C#. С помощью программы вы получаете базу данных Access (JET), которая уже используется. На данный момент я хочу подключиться к текущей базе данных по практическим соображениям. Однако в обозримом будущем я хотел бы заменить его на SQL Server.Вставить десятичное значение в поле «Валюта»
Вопрос: База данных хранит финансовую информацию, используя тип данных «Валюта» доступа. В C# я использую «Decimal» для представления финансовой информации. Естественно, я получаю сообщение об ошибке при попытке запроса INSERT или UPDATE для сохранения десятичного разряда в поле Currency (фактически, я получаю сообщение об ошибке один раз и вместе с ним, он автоматически изменяет тип данных этой конкретной записи на десятичный). Я не уверен, что лучший способ решить эту проблему:
- Преобразование десятичной суммы в валюту в моей программе и вставка ее после. Возможно ли это (C# говорит, что значения из поля имеют тип DBNull, так как он не знает Currency)? Если да, то как мне это сделать?
- Измените тип данных поля на десятичный. Буду ли я подвергать коррупцию финансовой информации, когда я это делаю?
- Любые другие/лучшие предложения?
Заранее благодарен!
Точное сообщение об ошибке:
System.Data.Odbc.OdbcException (0x80131937): ERROR [07006]
[Microsoft][ODBC Microsoft Access-stuurprogramma]Inbreuk op kenmerk van beperkt gegevenstype
Это голландский и переводит Restricted data type attribute violation
Мой UPDATE Код:
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;
}
Пример вашего кода, в котором вы пытаетесь вставить значения и точное сообщение об ошибке, будет очень полезно здесь (версия для доступа?) – Steve
Вы пытались отправить переменную как тип: OleDbType.Currency? – OmerBTW
Я добавил код и сообщение об ошибке. Версия доступа - 97 (как я уже сказал, устарел). @ OmerBTW: Я использую Odbc, поэтому я боюсь, что это не сработает. – JeroenM