这两天在写一个程序,用的是access数据库。要动态创建一个数据表,并且数据表中的字段要循环创建。
一开始用的是OleDbParametr传递数据:
while (i <= nPostions)
{
OleDbParameter paraIndex = new OleDbParameter("@Index", System.Data.DbType.String);
paraIndex.DbType = System.Data.DbType.String;
paraIndex.Direction = System.Data.ParameterDirection.Input;
paraIndex.Value = "位置" + i.ToString();
Cmd.Parameters.Add(paraIndex);
string sCmdString4 = "Alter Table BW_Table Add Column @Index text";
Cmd.CommandText = sCmdString4;
Cmd.ExecuteNonQuery();
i++;
}
结果确把@Index当做字段名插入到数据库表里面了。
然后改写程序:
while (i <= nPostions)
{
string strIndex = "位置" + i.ToString();
string sCmdString4 = "Alter Table BW_Table Add Column" +strIndex+ "text";
Cmd.CommandText = sCmdString4;
Cmd.ExecuteNonQuery();
i++;
}
运行,报字段定义语法错误。然后修改
string sCmdString4 = "Alter Table BW_Table Add Column'"+strIndex+"'text";
运行,结果是所加的字段名字都有单引号,‘位置1','位置2'...
然后还是去掉单引号,在网上搜,哪里语法错误了,找了一天都没解决问题。期间,单步运行了好多次,都是同样的错误,就是不知道哪里语法错误了。
第二天早晨,实在找不出来了,就问了同事一下,同事帮我单步运行了一下,只一次,就找到错误了。
运行到 string sCmdString4 = "Alter Table BW_Table Add Column" +strIndex+ "text"这一句是发现 sCmdString4 = "Alter Table BW_Table Add Column位置1text。我想现在能发现错误了吧。少了两个空格,因此正确的语句应该是
string sCmdString4 = "Alter Table BW_Table Add Column " +strIndex+ " text";
这让我很是郁闷啊!为什么自己单步运行了一整天就没发现错误呢。现在分析看来是,一直认为是自己sql语句关键词用的不对,所以上网查啊查,查了一整天也没解决问题。
并且单步运行时根本没有仔细耐下心里查看出错的字符串到底是什么,导致错误一次一次地从自己眼皮底下溜走,浪费了大量的时间。然而同事单步运行时,确能把注意力聚焦
到问题出错的地方,很快就发现了问题。这说明自己很多时候欠缺的不是编程能力,而是心没有沉下来,解决问题的思路也有问题。血的教训!