<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data" %>
<Script language="VB" Runat="Server">
  
   'strSQL 为 SQL 语句,FileName 为数据库文件名,TableName 为数据表名称。
  Function CreateDataSet(strSQL As String, FileName As String, TableName As String) As DataSet
    Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                               "Data Source=" & Server.MapPath("news.mdb")
    Dim objCmd As New OleDbDataAdapter(strSQL, ConnString)
    Dim DS As New DataSet()
    objCmd.Fill(DS, TableName)
    CreateDataSet = DS
  End Function 
  
  'BindList 过程用来指定数据源,并连接到 DataGrid 控件
  Sub BindList()
    myDataGrid.DataSource = CreateDataSet("Select * From news", "news.mdb", "news")
    myDataGrid.DataBind()
  End Sub  Sub Page_Load(sender As Object, e As Eventargs)
    If Not IsPostBack Then BindList()
  End Sub  '用来进入数据编辑模式
  Sub DataGrid_EditCommand(sender As Object, e As DataGridCommandEventArgs)
    myDataGrid.EditItemIndex = e.Item.ItemIndex
    BindList()
  End Sub  '用来离开数据编辑模式
  Sub DataGrid_CancelCommand(sender As Object, e As DataGridCommandEventArgs)
    myDataGrid.EditItemIndex = -1
    BindList()
  End Sub  '用来更新数据
  Sub DataGrid_UpdateCommand(sender As Object, e As DataGridCommandEventArgs)
    Dim news_head As String = CType(e.Item.Cells(1).Controls(0), TextBox).Text
    Dim news_body As String = CType(e.Item.Cells(2).Controls(0), TextBox).Text
    Dim post_date As date = CType(e.Item.Cells(3).Controls(0), TextBox).Text
    Dim strSQL As String
    strSQL = "Update news Set news_head='" & news_head & "', news_body=" & news_body & ", post_date=" & post_date & " Where " & myDataGrid.DataKeyField & "='" & myDataGrid.DataKeys(e.Item.ItemIndex) & "'"    Dim objConn As New OleDbConnection()
    objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                               "Data Source=" & Server.MapPath("news.mdb")
    objConn.Open()
    Dim objCmd As New OleDbCommand(strSQL, objConn)
    objCmd.ExecuteNonQuery
    myDataGrid.EditItemIndex = -1
    BindList()
  End Sub
 </Script><meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<body MS_POSITIONING="GridLayout">

<Form Runat="Server" ID="Form1">
<Asp:DataGrid Runat="Server" Id="myDataGrid" AutoGenerateColumns="False" DataKeyField="news_id" HorizontalAlign="Center"
Width="650" OnEditCommand="DataGrid_EditCommand" OnUpdateCommand="DataGrid_UpdateCommand"
OnCancelCommand="DataGrid_CancelCommand">
<HeaderStyle Font-Size="Small" Font-Bold="True" HorizontalAlign="Center" ForeColor="#FFFFCC"
BackColor="#990000" />
<ItemStyle Font-Size="X-Small" ForeColor="#330099" />
<Columns>
<Asp:TemplateColumn HeaderText="编号">
<ItemTemplate>
<%# Container.DataItem("news_id") %>
</ItemTemplate>
<EditItemTemplate>
<%# Container.DataItem("news_id") %>
</EditItemTemplate>
</Asp:TemplateColumn>
<Asp:BoundColumn HeaderText="标题" DataField="news_head" />
<Asp:BoundColumn HeaderText="内容" DataField="news_body" />
<Asp:BoundColumn HeaderText="日期" DataField="post_date" />
<Asp:EditCommandColumn EditText="编辑" CancelText="取消" UpdateText="更新" HeaderText="功能" ItemStyle-HorizontalAlign="Center" />
</Columns>
</Asp:DataGrid>
</Form>
</body>
错误:
语法错误 (操作符丢失) 在查询表达式 '2004-11-23 5:42:25' 中。 
要是把更新改成
    strSQL = "Update news Set news_head='" & news_head & "', news_body=" & news_body & " Where " & myDataGrid.DataKeyField & "='" & myDataGrid.DataKeys(e.Item.ItemIndex) & "'"错误又变成,
至少一个参数没有被指定值。
帮帮我啊,为什么会这样呢?

解决方案 »

  1.   

    news_body也是文本型的吧,那样也该用单引号啊
    strSQL = "Update news Set news_head='" & news_head & "', news_body='" & news_body & "' Where " & myDataGrid.DataKeyField & "='" & myDataGrid.DataKeys(e.Item.ItemIndex) & "'"
    postdate那个加##试试
    strSQL = "Update news Set news_head='" & news_head & "', news_body='" & news_body & "',postdate=#"& postdate&"# Where " & myDataGrid.DataKeyField & "='" & myDataGrid.DataKeys(e.Item.ItemIndex) & "'"
      

  2.   

    跟踪一下看 strSQL 是什么样子的。
      

  3.   

    s1ihome(I Believe I Can Fly) 想问一下,像“news_body也是文本型的吧,那样也该用单引号啊”,这部份算是SQL的知识呢?还是ASP.NET的啊?它属于哪里的内容?我改成这样了
    strSQL = "Update news Set news_head='"& news_head &"', news_body='"& news_body &"',post_date=#"& post_date &"#  Where " & myDataGrid.DataKeyField & "='" & myDataGrid.DataKeys(e.Item.ItemIndex) & "'"
    但不行啊,错误是:标准表达式中数据类型不匹配。 
    news_head,news_body都是文本的,post_date是日期的
    我还想知道news_body要是改成备注的,还用单引号吗?像这样的规则哪里有讲啊?