台灣最大程式設計社群網站
線上人數
731
 
會員總數:246038
討論主題:189624
歡迎您免費加入會員
討論區列表 >> ASP.NET >> [NET]Data type mismatch
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[NET]Data type mismatch
價值 : 0 QP  點閱數:2620 回應數:7
樓主

sonic
初學者
45 12
34 17
發送站內信

下面這一個aspx和資料庫配合時
如果employeeID的類型為  text時-----ok
但如果改為number時----------error
出現--Data type mismatch in criteria expression
想請教一下,在維持employeeID的類型為number的狀況下
該怎麼寫啊?

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script language="VB" runat="server">
   sub Submit(obj as Object, e as EventArgs) 
      'set up connection
      dim myConnection as new OleDbConnection _
         ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
         "Data Source=c:\inetpub\wwwroot\final project\happytra.mdb")

      'open connection
      dim myCommand as new OleDbDataAdapter _
         ("select * from CustomerTravel where employeeID='" & txEmployee.text &"'", myConnection)

      'fill dataset
      dim ds as DataSet = new DataSet()
      myCommand.Fill(ds, "CustomerTravel")

      'select data view and bind to server control
      DataGrid1.DataSource = ds.Tables("CustomerTravel").DefaultView
      DataBind()
   end sub
   
   sub DataGrid1_ItemCommand(obj as object, e as _
      DataGridCommandEventArgs)
      DataGrid1.SelectedIndex = e.Item.ItemIndex
      DataBind()
   end sub
</script>
<html>
<body>

   <form runat="server">
   Please enter EmployeeID:
<asp:textbox id="txEmployee" runat="server" /><p>
   Please enter the Start Date:
<asp:textbox id="txSmallDate" runat="server" /><p>
   Please enter the End Date:
<asp:textbox id="txBigDate" runat="server" /><p>   
<asp:button id="btSubmit" text="Submit" onclick="Submit" runat="server" /><p>
      <asp:DataGrid id="DataGrid1" runat="server"
      BorderColor="black"
      GridLines="Vertical"
      cellpadding="4"
      cellspacing="0"
      width="450"
      Font-NameFont-Names="Arial"
      Font-Size="8pt"
      ShowFooter="True"
      HeaderStyle-BackColor="#cccc99"
      FooterStyle-BackColor="#cccc99"
      ItemStyle-BackColor="#ffffff"
      AlternatingItemStyle-Backcolor="#cccccc"
      AutoGenerateColumns="false">

      <Columns>

            <asp:TemplateColumn HeaderText="EmployeeID">
                  <ItemTemplate>
                        <asp:Label id="Name" runat="server"
                              Text='<%# Container.DataItem("employeeID") %>'/>
                  </ItemTemplate>
                              </asp:TemplateColumn>

            <asp:BoundColumn HeaderText="TravelRoute"
                  DataField="TravelRoute"/>

            <asp:BoundColumn HeaderText="Date" DataField="Date"/>

            <asp:BoundColumn HeaderText="CustomerID"
                  DataField="customerID" />

            <asp:BoundColumn HeaderText="Fee" DataField="fee" />


      </Columns>

</asp:DataGrid>

   </form>
   
</body>
</html>

本篇文章發表於2002-05-08 12:37
1樓
回應

sabcat
檢舉此回應
>>where employeeID='" & txEmployee.text &"'"
改成where employeeID=" & txEmployee.text

只有資料欄位型態為字串(文字)時 才需將值放於 '' 
您可能需要多看一些書了~加油
本篇文章回覆於2002-05-08 12:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

sonic
檢舉此回應
那如果我再加上日期限制時,是不是
where employeeID=" & txEmployee.text and Date > " & txSmallDate and Date< " & txBigDate
本篇文章回覆於2002-05-08 13:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

sabcat
檢舉此回應
這用Between來做即可
但是..請問一下..你寫的Date是資料表中的欄位嗎?
若是..建議換一下名稱

where employeeID=" & txEmployee.text & "and [Date] Between " & txSmallDate.Text & " and " & txBigDate.Text

以上是假設Date是你資料欄位名稱
(因為Date屬關鍵字..若用在欄位名稱上..則在撰寫SQL敘述時需用[]括住)
且txSmallDate及txBigDate為TextBox控制項

本篇文章回覆於2002-05-08 14:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

sonic
檢舉此回應
可是我照你所說改寫之後,網頁是可以跑
可是只會秀出空的 資料表ㄝ
順便一提
我已把資料表中Date改成TravelDate
所以現在是
where employeeID=" & txEmployee.text & " and TravelDate Between " & txSmallDate.Text & " and "& txBigDate.Text , myConnection)
本篇文章回覆於2002-05-08 17:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

sonic
檢舉此回應
還有一點很有趣的是
如果資料庫裡TravelDate的類型是Date/Time
執行結果是空集合
可是改成text時
是可以執行
但是會得到錯誤的table
我是說table裡的資料是錯的
本篇文章回覆於2002-05-08 17:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

sonic
檢舉此回應
空集合的問題已經解決
我查SQL的用法,發現date的前後,需要加上#date#
也就是#1/1/2002#
不過我還是無法把#整合到  where  裡
所以現在我在輸入字串時
都要自行加上#
有人可以解決嗎
本篇文章回覆於2002-05-10 06:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

sabcat
檢舉此回應
兩種解決方式
1.將你輸入的值以cdate來做轉換
ex:TravelDate Between " & CDate(txSmallDate.Text) & " and " & CDate(txBigDate.Text)

2.自行在SQL敘述中加入
EX:TravelDate Between #" & txSmallDate.Text & "# and #"& txBigDate.Text & "#"
本篇文章回覆於2002-05-10 10:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.