データベースにデータを挿入するストアドプロシージャがあり、SQL Server 2005でデータベースを使用していてもSQLにアップグレードしたときに問題なく動作していました。 Server 2008 R2となり、2回成功すると失敗します。ストアドプロシージャの呼び出しがWebサービスから失敗します
文字列またはバイナリデータが
を切り捨てられるSQL例外から返されるエラーは文が
を終了しているされては、誰もが前に、問題のこの種に遭遇していますか?私はSQL Server 2008に移行して以来これが始まったばかりです。
私は切り捨てエラーの意味を知っていますが、これは問題です。私は値と長さを確認しました。それらのどれもが挿入されているフィールドサイズを超えていません。また、これはManagement Studioから複数回実行でき、決して失敗しません。だから、私はその接続やSQLコマンドオブジェクトと何かを考えていますか?データベースへの接続のための
コードは、私はかなり前にこのエラーを見ている
Public Function AddDataToDatabase(ByVal ModuleName As String, ByVal ModuleKey As Integer, ByVal ShapeDescription As String, ByVal ShapeNotes As String, ByVal ShapeType As String, ByVal ShapeStatus As String, ByVal FeatureType As String) As AttributeEditingResult Implements IDataService.AddDataToDatabase
Dim sqlConn As New SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("MDC_Reference").ConnectionString)
Dim sqlCmd As SqlClient.SqlCommand = New SqlCommand
sqlCmd.CommandText = ConfigurationManager.AppSettings.Get("sp_Insert")
sqlCmd.CommandType = CommandType.StoredProcedure
sqlCmd.Connection = sqlConn
Dim myReader As SqlClient.SqlDataReader
Dim TableKey As Integer = 0
Dim Result As New AttributeEditingResult With {
.Success = False, _
.TableKey = TableKey}
sqlCmd.Parameters.Clear()
sqlCmd.Parameters.Add(New SqlParameter("@ModuleName", SqlDbType.VarChar, 50))
sqlCmd.Parameters.Add(New SqlParameter("@ModuleKey", SqlDbType.Int))
sqlCmd.Parameters.Add(New SqlParameter("@ShapeDescription", SqlDbType.VarChar, 255))
sqlCmd.Parameters.Add(New SqlParameter("@ShapeNotes", SqlDbType.VarChar, 1024))
sqlCmd.Parameters.Add(New SqlParameter("@ShapeType", SqlDbType.VarChar, 10))
sqlCmd.Parameters.Add(New SqlParameter("@ShapeStatus", SqlDbType.VarChar, 50))
sqlCmd.Parameters.Add(New SqlParameter("@FeatureType", SqlDbType.VarChar, 50))
sqlCmd.Parameters("@ModuleName").Value = ModuleName
sqlCmd.Parameters("@ModuleKey").Value = ModuleKey
sqlCmd.Parameters("@ShapeDescription").Value = ShapeDescription
sqlCmd.Parameters("@ShapeNotes").Value = ShapeNotes
sqlCmd.Parameters("@ShapeType").Value = ShapeType
sqlCmd.Parameters("@ShapeStatus").Value = ShapeStatus
If FeatureType = "NULL" Then
sqlCmd.Parameters("@FeatureType").Value = DBNull.Value
Else
sqlCmd.Parameters("@FeatureType").Value = FeatureType
End If
Try
sqlConn.Open()
myReader = sqlCmd.ExecuteReader()
While myReader.Read
Result.TableKey = CInt(myReader(0))
End While
sqlConn.Close()
sqlCmd.Dispose()
Result.Success = True
Catch ex As SqlException
sqlConn.Close()
sqlCmd.Dispose()
Result.Success = False
Result.ErrorMessage = ex.Message & vbNewLine & ex.StackTrace
End Try
Return Result
End Function
値はvarcharsよりも長いのですか? – SQLMason
'SqlConnection'、' SqlCommand'と 'SqlDataReader'を' Using'ブロックに配置してみてください。問題が数回試行された後に発生するという事実は、リソースリークがある可能性があることを示しています。 –
私が下で言うこと以外にも、John Saundersからのコメントを使用して文を使用することについてのコメントを2番目にする必要があります。 – peter