-1

現在のvb.net (visual studio 2010) プロジェクトでは、 SQL Server CEデータベースを扱っています。
携帯電話番号を格納するために、 Mobile_noフィールド にnvarcharデータ型を使用しています。

テスト中に、フィールドMobile_noに1234567890を入力しました..

しかし、取得時にこのエラーが発生しています:
式の評価によりオーバーフローが発生しました。[関数名 (既知の場合)=]

では、携帯電話番号を sql ce データベースに保存するにはどうすればよいですか?

編集:
挿入のコード:

Dim SQLquery As String
Dim enumber As String
enumber = 1234567890
insqertSql = "INSERT INTO tbl_cust(c_id,Mobile_no) VALUES(@CId, @Phno)"
            Dim cmd As New SqlCeCommand(insqertSql, con)
            cmd.Parameters.Add("@CId", c_id)
            cmd.Parameters.Add("@Phno", enumber)
            cmd.ExecuteNonQuery()  


検索クエリ:

SQLquery = "SELECT * FROM tbl_cust WHERE ePhone =" & txt_number.text

4

1 に答える 1

1

問題は、取得クエリの文字列連結にあります。

SQLquery = "SELECT * FROM tbl_cust WHERE ePhone =" & txt_number.text

ここでは、WHERE 条件として使用するときに文字列値を囲む必要がある一重引用符がありません。ただし、INSERT クエリではパラメーター化されたアプローチを使用していますが、選択に同じアプローチを使用しないのはなぜですか?

SQLquery = "SELECT * FROM tbl_cust WHERE ePhone = @number"
Dim cmd As New SqlCeCommand(SQLquery, con)
cmd.Parameters.Add("@number", txt_Number.Text)
SqlCeDataReader reader = cmd.ExecuteReader()  
........

パラメーター化されたクエリを使用すると、文字列の引用符、10 進数、および日付形式の適切な処理が、これらの値をデータベース エンジンに渡す方法をあなたや私よりもよく知っている基礎となるフレームワーク コードに渡されます。また、パラメータ化されたクエリは、 SQL インジェクションの可能性を排除します。

于 2013-08-10T17:27:19.677 に答える