none
让DataGridview已经绑定数据库的表了,接着我要更改而不是查询 RRS feed

  • 问题

  • 我想做一个电子字典,对每一个统一字符分类、解释。第一步就是将每个字符以BigUnicode为ID都一个不差地写入表中

    private void Reports_Load(object sender, EventArgs e)
            {   string pa=@"d:\安装\练习打字\醚芪考试题.accdb";
                string lianshang=$"{Properties.Resources.solveRead_accdb}Data source={pa}";
                OleDbConnection connection = new OleDbConnection(lianshang);
                for(int n=256;n<284;n++){string _id=string.Format("{0:X}",n).PadLeft(4,'0');
                    string _ys=datapack.ArcGetByte(n,Encoding.Unicode).ToString();
                OleDbCommand cmd=new OleDbCommand($"update 字符 set 映射 ={_ys} where ID ={_id}",connection);
                connection.Open();
                DataTable table=new DataTable();
                //table.Load(reader);
                //dataGridView1.DataSource=table;
                connection.Close();}
    有哪里错了吗?如果已经绑定了是不是就没有connection的事了呢?

    2019年2月1日 2:58

答案

  • OleDbCommand cmd在哪里执行的,还是赋值行直接执行的?
    • 已标记为答案 czhch 2019年2月1日 11:17
    2019年2月1日 6:18
  • Hi czhch,

    我认为你的代码不存在问题,但在连接数据库的时候最好使用“using”语句,这样可以及时释放连接资源,避免内存泄漏。

        using (OleDbConnection connection = new OleDbConnection(lianshang))
        {
            // Code omitted
            // ...
            // Code omitted
        }

    在创建完Command对象后你还要执行它,添加如下代码:

        OleDbCommand cmd = new OleDbCommand($"update 字符 set 映射 ={_ys} where ID ={_id}", connection);
        connection.Open();
        // 执行插入语句
        cmd.ExecuteNonQuery();
        connection.Close();

    如果你想要使用数据库中的表作为“DataGridView”的数据源,你还可以参考以下代码:

        OleDbDataAdapter sda = new OleDbDataAdapter("Select * From 字符", conn);
        DataSet Ds = new DataSet();
        sda.Fill(Ds, "T_Class");
        this.dataGridView1.DataSource = Ds;
        this.dataGridView1.DataMember = "T_Class";

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 czhch 2019年2月1日 11:17
    2019年2月1日 7:23
    版主
  • Hi czhch,

    有关“ExecuteNonQuery”的详细信息,你可以参考OleDbCommand.ExecuteNonQuery Method

    有关Command对象的执行,还有“ExecuteReader”和“ExecuteScalar”两种方法来实现。

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 czhch 2019年2月1日 11:17
    2019年2月1日 8:00
    版主
  • System.Data.OleDb.OleDbException:“IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。”写上了执行的语句,就出现了错误。
    • 已标记为答案 czhch 2019年2月1日 11:05
    2019年2月1日 8:09
  • 原来是

    "update 字符 set 映射=\"{ys}\" where ID=\"{iid}\""

    就是差了两组双引号


    • 已标记为答案 czhch 2019年2月1日 11:15
    • 已编辑 czhch 2019年2月1日 11:16 双引号
    2019年2月1日 11:13

全部回复

  • OleDbCommand cmd在哪里执行的,还是赋值行直接执行的?
    • 已标记为答案 czhch 2019年2月1日 11:17
    2019年2月1日 6:18
  • Hi czhch,

    我认为你的代码不存在问题,但在连接数据库的时候最好使用“using”语句,这样可以及时释放连接资源,避免内存泄漏。

        using (OleDbConnection connection = new OleDbConnection(lianshang))
        {
            // Code omitted
            // ...
            // Code omitted
        }

    在创建完Command对象后你还要执行它,添加如下代码:

        OleDbCommand cmd = new OleDbCommand($"update 字符 set 映射 ={_ys} where ID ={_id}", connection);
        connection.Open();
        // 执行插入语句
        cmd.ExecuteNonQuery();
        connection.Close();

    如果你想要使用数据库中的表作为“DataGridView”的数据源,你还可以参考以下代码:

        OleDbDataAdapter sda = new OleDbDataAdapter("Select * From 字符", conn);
        DataSet Ds = new DataSet();
        sda.Fill(Ds, "T_Class");
        this.dataGridView1.DataSource = Ds;
        this.dataGridView1.DataMember = "T_Class";

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 czhch 2019年2月1日 11:17
    2019年2月1日 7:23
    版主
  • 你的意思我没有写执行的语句,好像是的。
    2019年2月1日 7:48
  • Hi czhch,

    有关“ExecuteNonQuery”的详细信息,你可以参考OleDbCommand.ExecuteNonQuery Method

    有关Command对象的执行,还有“ExecuteReader”和“ExecuteScalar”两种方法来实现。

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 czhch 2019年2月1日 11:17
    2019年2月1日 8:00
    版主
  • System.Data.OleDb.OleDbException:“IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。”写上了执行的语句,就出现了错误。
    • 已标记为答案 czhch 2019年2月1日 11:05
    2019年2月1日 8:09
  • Hi czhch,

    请检查你的数据库是否被另一个程序占用,或者检查你字段是否与数据库关键字冲突。

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年2月1日 8:13
    版主
  • OleDb已经绑定了,更新命令应该没有Connection.open的事,但cmd执行命令目前是不能少
    2019年2月1日 8:52
  • 原来是

    "update 字符 set 映射=\"{ys}\" where ID=\"{iid}\""

    就是差了两组双引号


    • 已标记为答案 czhch 2019年2月1日 11:15
    • 已编辑 czhch 2019年2月1日 11:16 双引号
    2019年2月1日 11:13