使用参数化查询添加访问使用OldDb中的比例为2的数字类型的列
我试图使用Oledb
命令在access
数据库中添加一些列。该列的类型是不同的,如货币(OleDbType.Currency
),浮点与小数点后两位(OleDbType.Numeric
),整数(OleDbType.Integer
)等下面的代码是我用来完成我的任务...但每次它显示错误消息,有些..“..错误字段定义...”或更改代码的某个时候它显示“在列定义语法错误。”等使用参数化查询添加访问使用OldDb中的比例为2的数字类型的列
var insertColumnCommand = @"ALTER TABLE ProductRecordsTable ADD COLUMN [Price]= @ProductPrice, [Shipped(NoS)]= @ProductShippedNumber, [Returned(NoS)]= @ProductReturnedNumber, [Sold(NoS)]= @ProductSoledNumber, [Tax Percentage]= @ProductTaxPercentage";
var con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MyDatabase.accdb;Jet OLEDB:Database Password= 12345;");
using(con)
{
var cmd = new OleDbCommand(insertColumnCommand, con);
if (con.State == ConnectionState.Closed)
con.Open();
cmd.Parameters.Add("@ProductPrice", OleDbType.Currency);
cmd.Parameters.Add("@ProductShippedNumber", OleDbType.Integer);
cmd.Parameters.Add("@ProductReturnedNumber", OleDbType.Integer);
cmd.Parameters.Add("@ProductSoledNumber", OleDbType.Integer);
var parameter = new OleDbParameter("@ProductTaxPercentage",OleDbType.Numeric);
parameter.Precision = 6;
parameter.Scale = 2;
cmd.Parameters.Add(parameter);
cmd.ExecuteNonQuery();
con.Close();
}
我也想补充选项比如将NULL
的值放入新添加的列中的表中已有的行中,并且0(Zero)
将插入为default
值,对于稍后将添加的行。但cmd.ExecuteNonQuery();
类似过于固执,无法成功运行。
如上面的注释所述,当您执行数据定义语言命令(如ALTER TABLE)(在我知道的任何数据库中都是如此)时,不能使用参数。在您的特定情况下,可以使用DECIMAL数据类型作为需要scale和precision值,no =列名和类型之间的值。
@"ALTER TABLE ProductRecordsTable
ADD COLUMN [Price] DECIMAL (10,2),
[Shipped(NoS)] INT,
[Returned(NoS)] INT,
[Sold(NoS)] INT,
[Tax Percentage] DECIMAL (6,2)";
然后,假设您要将价格设置为NOT NULL。首先执行一个查询,每一行设置为一个预定值
"UPDATE ProductRecordsTable SET Price = 0"
现在设置在列的NOT NULL值
@"ALTER TABLE ProductRecordsTable ALTER COLUMN [Price] DECIMAL (10,2) NOT NULL"
如果你想设置一个默认值(在一些新记录列
@"ALTER TABLE ProductRecordsTable ALTER COLUMN [Sold (NoS)] INT DEFAULT 0"
谢谢@Steve,让我检查你的答案,如果它解决了我的问题,我会将其标记为答案。谢谢.. – Izqry
我还想补充一点,你可以帮助我的额外功能,因为我已经在我的问题中的代码部分下面添加了部分。“我还想添加选项,如将NULL值放入在新添加的列中已经存在的表的行,并且0(零)将被插入为默认值,对于将在稍后添加的行“ – Izqry
”您可以执行查询来设置已存在的行的默认值在数据表中(在添加上面的列之后)如果您需要在某列上设置NOT NULL,那么请重新执行ALTER TABLE ALTER COLUMN,使用NOT NULL作为列(当然,这需要先前的命令为现有行设置值) – Steve
你不能在这种情况下使用的参数。参数只用于检索数据或更新。 – Steve
然后@Steve请给我的命令来指定如何刻度值设置USI ng传统的非参数化OldDb命令 – Izqry
请阅读[在什么情况下可以为我的问题添加“紧急”或其他类似的短语,以获得更快的答案?](// meta.*.com/q/326569) - 总结是这不是解决志愿者问题的理想方式,并且可能对获得答案起反作用。请不要将这添加到您的问题。 – halfer