使用参数化查询添加访问使用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();类似过于固执,无法成功运行。

+0

你不能在这种情况下使用的参数。参数只用于检索数据或更新。 – Steve

+0

然后@Steve请给我的命令来指定如何刻度值设置USI ng传统的非参数化OldDb命令 – Izqry

+0

请阅读[在什么情况下可以为我的问题添加“紧急”或其他类似的短语,以获得更快的答案?](// meta.*.com/q/326569) - 总结是这不是解决志愿者问题的理想方式,并且可能对获得答案起反作用。请不要将这添加到您的问题。 – halfer

如上面的注释所述,当您执行数据定义语言命令(如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" 
+0

谢谢@Steve,让我检查你的答案,如果它解决了我的问题,我会将其标记为答案。谢谢.. – Izqry

+0

我还想补充一点,你可以帮助我的额外功能,因为我已经在我的问题中的代码部分下面添加了部分。“我还想添加选项,如将NULL值放入在新添加的列中已经存在的表的行,并且0(零)将被插入为默认值,对于将在稍后添加的行“ – Izqry

+0

”您可以执行查询来设置已存在的行的默认值在数据表中(在添加上面的列之后)如果您需要在某列上设置NOT NULL,那么请重新执行ALTER TABLE ALTER COLUMN,使用NOT NULL作为列(当然,这需要先前的命令为现有行设置值) – Steve