【问题标题】:Cannot add a column to an access database through ADONet/ODBC (or OleDb)无法通过 ADONet/ODBC(或 OleDb)将列添加到访问数据库
【发布时间】:2013-09-18 22:11:59
【问题描述】:

我最近编写了一个脚本,用于将列添加到数据库表中,作为数据转换过程的一部分。我正在使用 ODBC,性能不是大问题。

JScript - 这很好用

var cxn = new ActiveXObject("Adodb.connection");
cxn.Open(connectionString);
var statement = "alter table MyTable add MyColumn varchar(40) null";
var changed = 0;
cxn.execute(statement, changed, 0x80);

MFC/C++ & CDatabase/ODBC - 工作也很好

CDatabase db;
if (db.Open(NULL, FALSE, FALSE, szConnectionString, FALSE)) 
   db.ExecuteSQL("ALTER TABLE MyTable ADD MyColumn VARCHAR(40) NULL");

C#/ADONet - 不起作用

using (var cxn = GetOpenConnection())
{
    var cmd = cxn.CreateCommand();
    cmd.CommandText = "ALTER TABLE MyTable ADD MyColumn VARCHAR(40) NULL";

    // MS Access specific SQL also fails
    //cmd.CommandText = "ALTER TABLE MyTable ADD COLUMN MyColumn TEXT(40)";

    cmd.ExecuteNonQuery();
    ....

ExecuteNonQuery() 返回 -1 表示失败。我不知道为什么。

同样,这三个都使用具有相同连接字符串的 ODBC。为什么 C# 版本不起作用?

【问题讨论】:

    标签: c# sql ado.net odbc ado


    【解决方案1】:

    我希望这围绕框架和非框架对象展开。

    在 JScript 中,您使用 Adodb 连接连接到访问后端,该连接是一个 COM+(即不是 .Net)对象。

    我不确定 ODBC 连接到底是什么,但希望它是相似的。

    使用 ADO.Net,您使用托管 (.Net) 连接进行连接,但它失败了。

    我不具体知道访问后端不是 .Net 对象(如果它是 .mdb 肯定不是,但我不太确定 .accdb),但这肯定是你的结果的含义'已经报道了。

    【讨论】:

      【解决方案2】:

      我建议你试试这个命令文本:

      cmd.CommandText = "ALTER TABLE [MyTable] ADD COLUMN [MyColumn] TEXT(40)";
      

      【讨论】:

        猜你喜欢
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        相关资源
        最近更新 更多