我写的winform权限应该没问题 
代码==============================
oleDbCmd.CommandText = "update  [周报表$C7:E7] set F2='333' ";
oleDbCmd.CommandTimeout = 15;
if(oleDbConn.State == ConnectionState.Closed)
{
oleDbConn.Open();
}
try
{
int i = oleDbCmd.ExecuteNonQuery();
MessageBox.Show(i.ToString());
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
出错提示 操作必须使用一个可更新的查询
谢谢!!

解决方案 »

  1.   

    cell A4是指第一列,第四行的单元格
    range(A1,E10) 是指第一行第一列到第五列第十行的区域
      

  2.   

    update 某个单元格的内容 如何写?
    update xxx set F1=333 WHERE...如果是第二行 那么where如何指定是第2行?
      

  3.   

    你那微软的例子我看了一下,那种做法是把excel中sheet做为table来处理,这只是一个例子,实际应用中有许多功能不能达到,那种用A1,F1之类的取固定Cell的方法根本不可取,应该是用相对位置处理的。
        这些功能只能在excel(添加引用)中实现,OWC编程可以实现一些功能,但是对于格式之类的进行处理却功能有限,可能微软的还没有做完善。
        具体的用法,你看这里吧,介绍了一些基本的知识,对于简单的需求是足够了:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_vsto2003_ta/html/odc_vstexlchrt.asp
      

  4.   

    我用odbc测试成功了
    开始写程序后又出现“缺少参数 需要...”
    ///....................
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    //开始写数据到excel
    string strConn = @"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq="+Environment.CurrentDirectory+@"\template.xls;ReadOnly=0;";
    System.Data.Odbc.OdbcConnection Conn = new OdbcConnection(strConn);
    StringBuilder sbSql = new StringBuilder();
    sbSql.Append("UPDATE  [周报表$]");
    sbSql.Append(" SET F1=@F1");
    for(int i = 0; i<dt.Columns.Count;i++)
    {
    sbSql.Append(" ,F");
    sbSql.Append((i+2).ToString());
    sbSql.Append("=");
    sbSql.Append("@F");
    sbSql.Append((i+2).ToString());
    }
    sbSql.Append(" ,F38=@F38 ");
    sbSql.Append("  WHERE F39=@F39");
    txt.Text = sbSql.ToString();
    OdbcCommand Cmd = new OdbcCommand();
    Cmd.Connection = Conn;
    Cmd.CommandType = CommandType.Text;
    Cmd.CommandText = sbSql.ToString();
    MessageBox.Show(sbSql.ToString());
    Cmd.Parameters.Add("@F1",dtEnd.ToShortDateString());
    DataRow dr = dt.Rows[0];
    for(int i = 0; i<dt.Columns.Count;i++)
    {
    Cmd.Parameters.Add("@F"+(i+2).ToString(),(Convert.IsDBNull(dr[i]))?0:dr[i]); }
    Cmd.Parameters.Add("F38"," ");
    Cmd.Parameters.Add("F39","AAA");
      

  5.   

    Range => F3:G3
    set F2='333' // 可能是F2不在F3:G3范围内吧?
      

  6.   

    我在一个循环中运行多条update语句
    当执行到 UPDATE [周报表$] SET F22='37' WHERE F39='长 庆'
    的时候出现“参数不足,期待是1”
    其他都执行成功了
    请问什么原因 谢谢改成 UPDATE[周报表$] SET F22=37 WHERE F39='长 庆'
    另外 更新excel中的时间字段如何更新
    update...set F1='2004-4'...
    update...set F1=2004-4...
    都提示参数不足
      

  7.   

    微软的文章上写得很清楚:在excel中,缺省的把第一行作为header行(也就是第一行各单元格的内容作为字段名),如果第一行没有内容,要在连接串中把HDR=NO,这样Jet OLE DB provider 就会把字段名缺省定义为:F1,F2……
    由此可知:搂主的EXCEL第一行要么有内容,要么内容为空但HDR=YES
      

  8.   

    更新excel中的时间字段如何更新
    好像是
    update...set F1=#2004-4-01#...
      

  9.   

    關於ADO/ADO.NET For Excel其實我是很喜歡的,偶爾也做過一點,現在隨便談一談,拋磚引玉吧1:可以使用的"表名"不僅只是Excel中的表名,還可以使用Excel中的命名做為表名
    2:可正常使用select Insert這兩條命令.但update好象從沒有成功過,可能是無法使用update命令吧
    3:建議導出到excel.應先建立excel模板,在模板中增加excel命名,再進行數據的導出會方便很多,而且更便於定制外觀
    4:更多的技巧應該問問公司的文員,她們的excel比我用的好
      

  10.   

    Visual C#的Excel编程:http://www.chinaaspx.com/article/go.asp?id=297&typeid=3
      

  11.   

    我用 曲线救国 的方法 实现了需求
    具体方法在
    http://www.cnblogs.com/huobazi/archive/2004/04/27/7771.aspx
    但是对于用Ado操作的时候的问题 至今仍然困惑
    谢谢斑竹置顶
    谢谢大家讨论
    希望有好的办法.
    :)