none
為什麼我無法傳較長的字串到SQL Server中 RRS feed

  • 問題

  •  

    我把SQL Server的欄位設為varchar (511),

    VB中新增命令的相關指令為 

    Dim pn as string

     

    cmd.Parameters.Add(New SqlParameter("@pn", SqlDbType.VarChar, 511))
    cmd.Parameters("@pn").Value = pn

     

    pn的來源是從另一個table select出來

    大部分的資料新增都OK

    但是當欄位長度超過168左右(有時是167或169)就無法新增

    沒有錯誤訊息(Err.description沒有顯示資料)

    我試過取資料的不同部位子字串,只要長度小於168就沒問題

     

    請各位高手幫忙提示一下,我是不是忘了考慮甚麼

    感謝感謝

    2008年5月5日 上午 03:56

解答

  • 是字串被截斷嗎?

    我是沒有碰過你這樣的問題。

     

    除非完全沒有中文字,否則最好用 nvarchar(511)。

     

    你也可以改成:

     

    cmd.Parameters.Add(New SqlParameter("@pn", SqlDbType.VarChar, pn.Length))
    cmd.Parameters("@pn").Value = pn

     

    另外,在 .NET 請使用 Try...Catch 來捕捉例外,Err 最好不要再用了。

     

     

    2008年5月5日 上午 04:11
    版主

所有回覆

  • 是字串被截斷嗎?

    我是沒有碰過你這樣的問題。

     

    除非完全沒有中文字,否則最好用 nvarchar(511)。

     

    你也可以改成:

     

    cmd.Parameters.Add(New SqlParameter("@pn", SqlDbType.VarChar, pn.Length))
    cmd.Parameters("@pn").Value = pn

     

    另外,在 .NET 請使用 Try...Catch 來捕捉例外,Err 最好不要再用了。

     

     

    2008年5月5日 上午 04:11
    版主
  • 感謝大大

    發現是自己的疏忽,因為是一排欄位都要調大,有一個欄位漏了,所以塞不進去

    剛接手maintain程式,自己又不熟VB,才會以為是程式寫錯了

    請問一下,用try..Catch跟Err有甚麼不同嗎?

    我兩個都有試過,可是都沒傳回error訊息

    是後來直接在SQL Server下SQL命令,才看到error message

    像資料過長這種錯誤,有辦法在VB中check嗎?

    2008年5月5日 上午 05:47
  • Err 是 VB6 用法,但在 .NET 建議是用 try...catch,我也建議用 try...catch,這樣就不必用一堆 Goto。

     

    SQL Server 發現資料過長的話會擲回字串或二進位資料會被截斷的 SqlException,如果沒有擲回可能是有設定讓字串允許被截斷吧 ... 不過因為欄位長度事先就會知道,所以最好是直接在 VB check,像是:

    Code Snippet

     

    Dim myString As String

     

    myString = "ABCDEF"

     

    If myString.Length > 6 Then

        ...

    Else

        ,,,

    End If

     

     

     

    2008年5月5日 上午 06:51
    版主