这个是我要读取的数据表结构
CREATE TABLE [dbo].[TakeStock] (
[Sort] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Model] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Unit] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Quantity] [int] NULL ,
[ActualQuantity] [int] NULL ,
[WriteDate] [datetime] NULL ,
) ON [PRIMARY]
GO
------------------------------------------------------------------------------------
我使用oleDbDataAdapter读取的时候,只能生成Insert和Select语句!UPdate和Delete语句提示说:“未能指定唯一标识"TakeStock"的行的列”,导致我不能使用oleDbDataAdapter.Update(Dataset)一使用就提示:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。
应该如何解决这个问题?谢谢

解决方案 »

  1.   

    要设置不能为空的主键,也可以参考以下:public DataSet LGetDataSetAll(string sSelectCmd)
    {
    if (sSelectCmd.Length==0)
    throw new Exception("命令为空!");
    try
    {
    LCOleDbConn();
    System.Data.DataSet dsRet = new System.Data.DataSet();
    OleDbDataAdapter sda = new OleDbDataAdapter();

    OleDbCommand olecmdObj = new OleDbCommand();
    olecmdObj.CommandText = sSelectCmd;
    olecmdObj.CommandType = CommandType.Text;
    olecmdObj.CommandTimeout = 600;//(单位为秒)10分钟,默认为30秒
    olecmdObj.Connection = _dbConn; //OleDbCommandBuilder scb = new OleDbCommandBuilder(sda); sda.SelectCommand = olecmdObj;
    //sda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    LCOleDbConnConnDB();
    sda.Fill(dsRet);
    return dsRet;
    }
    catch(Exception excpt)
    {
    throw excpt;
    }
    finally
    {
    LCOleDbConnDisConnDB();
    }
    }
    这个不需要主键