你好,我用DataRow row=dataSet.Tables[0].NewRow()这种方法添加数据,我想用
 SqlCommandBuilder cmdBuild=new SqlCommandBuilder(dataAdapter);这种方法保存,我该如何写这个保存方法,我试了很久都保存不成功,能告诉我怎么做嘛?数据集的相关添加代码如下:                ds = allman.dataSet;//数据集
                string newUserNo = AutoID("tb_user", "ID");
                DataRow row = ds.Tables["tb_user"].NewRow();//实例化对象
                row["用户名"] = userName;
                row["密码"] = userPwd;
                row["编号"] = newUserNo;
                ds.Tables["tb_user"].Rows.Add(row);//讲新行添加到dataSet中保存数据的方法代码如下:
        /// <summary>
        /// 功能:根據UpdateTable生成需要的指令
        /// </summary>
        /// <returns>生成成功返回true,否則返回false</returns>
        private bool BuildSQLCmd()
        {
            //如果更新表为空则退出
            if (UpdateTable.Length <= 0)
            {
                WriteLog("没有设置更新表,不能生成更新和删除指令", true);
                return false;
            }
            SqlCommand cmd;
            string strUpdateField = strField;
            //如果更新表與實體的名稱不同,則要讀取UpdateTable的字段信息
            if (UpdateTable != EntityName)
            {
                //得到更新的表結構
                cmd = new SqlCommand("select top 0 * from " + UpdateTable);
                cmd.CommandType = CommandType.Text;
                cmd.Connection = DBConn;
                dataAdapter.SelectCommand = cmd;
                try
                {
                    dataAdapter.FillSchema(dataSet, SchemaType.Source, UpdateTable);
                }
                catch (Exception E)
                {
                    WriteLog("讀取數據失敗:" + E.Message, true);
                    return false;
                }
                DataTable tempTable = dataSet.Tables[UpdateTable];
                DataColumnCollection FieldListUpdate=tempTable.Columns;
                DataColumnCollection FieldListEntity = dataSet.Tables[EntityName].Columns;
                strUpdateField = "";
                //找到在EntityName和UpdateTable中都出現的字段,並生成更新字段列表
                for (int i = 0; i < FieldListUpdate.Count - 1; i++)
                {
                    string FieldName = FieldListUpdate[i].ColumnName;                    if (FieldListEntity.IndexOf(FieldName) >= 0)
                    {
                        if (strUpdateField == "")
                            strUpdateField = FieldName;
                        else
                            strUpdateField = strUpdateField + "," + FieldName;
                    }
                }
            }
            //得到更新的表結構
            cmd = new SqlCommand("select top 0 " + strUpdateField + " from " + UpdateTable);
            cmd.CommandType = CommandType.Text;
            cmd.Connection = DBConn;
            dataAdapter.SelectCommand = cmd;
            SqlCommandBuilder cmdBuild=new SqlCommandBuilder(dataAdapter);//SQL Command生成器
            this.CreateCmd = true;
            return true;
        }        /// <summary>
        /// 功能:保存數據
        /// </summary>
        /// <param name="UseTransaction">是否戶用事務</param>
        /// <param name="ShowMsg">保存後是否要提示信息。</param>
        /// <returns>保存成功返回真,否則返回假</returns>
        public bool Save(bool UseTransaction, bool ShowMsg) 
        {
            //如果还没有创建数据操作指令则创建,如果创建失败则不能保存。
            if (CreateCmd == false)
            {
                if (BuildSQLCmd() == false)
                    return false;
            }
            
            //更新數據
            try
            {
                dataAdapter.Update(dataSet, EntityName);//指定表名
            }
            catch (Exception E)
            {                WriteLog("保存失敗:" + E.Message,ShowMsg);
                return false;
            }
            WriteLog("保存成功!", ShowMsg);
            return true;
        }可是我用这方法保存不成功,难道我在做生成表结构的时候出错了吗?报错显示为:from附近有出错,但是我觉得没错啊!
请指教,能告诉我怎么做吗?恳请附上代码,不胜感激!

解决方案 »

  1.   

    不是这样用的,要么完全用向导生成数据源绑定(实际项目中基本不可能用到),要么完全自己手写建议楼主自己写数据库连接/数据库增删改查SQL句子,自己执行命令得到结果,不要用SqlCommandBuilder
      

  2.   

    SqlConnection cn = new SqlConnection("");
    SqlDataAdapter da = new SqlDataAdapter("Select * from tb", cn);
    DataSet ds = new DataSet();
    cn.Open();
    da.Fill(ds);
    cn.Close();    //更新操作
    ds.Tables[0].Rows[0]["Name"] = "test";
    cn.Open();
    SqlCommandBuilder cmd = new SqlCommandBuilder(da);
    da.Update(ds.Tables[0]);
    cn.Close();