2

SQL データベース テーブルに INSERT しようとしていますが、うまくいきません。そこで、SQL サーバー プロファイラーを使用して、クエリがどのように作成されているかを確認しました。それが示すものは次のとおりです。

declare @p1 int
set @p1=0
declare @p2 int
set @p2=0
declare @p3 int
set @p3=1
exec InsertProcedureName @ConsumerMovingDetailID=@p1 output, @UniqueID=@p2 output, 
                         @ServiceID=@p3 output, @ProjectID=N'0', @IPAddress=N'66.229.112.168', 
                         @FirstName=N'Mike', @LastName=N'P', @Email=N'mymail@yahoo.com', 
                         @PhoneNumber=N'(254)637-1256', @MobilePhone=NULL, @CurrentAddress=N'', 
                         @FromZip=N'10005', @MoveInAddress=N'', @ToZip=N'33067', 
                         @MovingSize=N'1', @MovingDate=''2009-04-30 00:00:00:000'', 
                               /*        Problem here  ^^^  */
                         @IsMovingVehicle=0, @IsPackingRequired=0, @IncludeInSaveologyPlanner=1
select @p1, @p2, @p3

ご覧のとおり、二重引用符SQL で構文エラーが発生するように、datetime フィールドを 2 組の一重引用符で囲みます。どこかに設定しなければならないことがあるのだろうか?

どんな助けでも大歓迎です。

環境の詳細は次のとおりです。

  • ビジュアル スタジオ 2008
  • .NET 3.5
  • Microsoft SQL Server 2005

これが私が使用している.NETコードです....

//call procedure for results
strStoredProcedureName = "usp_SMMoverSearchResult_SELECT";

Database database = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = database.GetStoredProcCommand(strStoredProcedureName);
dbCommand.CommandTimeout = DataHelper.CONNECTION_TIMEOUT;

database.AddInParameter(dbCommand, "@MovingDetailID", DbType.String, objPropConsumer.ConsumerMovingDetailID);
database.AddInParameter(dbCommand, "@FromZip", DbType.String, objPropConsumer.FromZipCode);
database.AddInParameter(dbCommand, "@ToZip", DbType.String, objPropConsumer.ToZipCode);
database.AddInParameter(dbCommand, "@MovingDate", DbType.DateTime, objPropConsumer.MoveDate);
database.AddInParameter(dbCommand, "@PLServiceID", DbType.Int32, objPropConsumer.ServiceID);
database.AddInParameter(dbCommand, "@FromAreaCode", DbType.String, pFromAreaCode);
database.AddInParameter(dbCommand, "@FromState", DbType.String, pFromState);
database.AddInParameter(dbCommand, "@ToAreaCode", DbType.String, pToAreaCode);
database.AddInParameter(dbCommand, "@ToState", DbType.String, pToState);

DataSet dstSearchResult = new DataSet("MoverSearchResult");
database.LoadDataSet(dbCommand, dstSearchResult, new string[] { "MoverSearchResult" });
4

6 に答える 6

3

日時フィールドに一重引用符を追加して、文字列として送信していると思われますか? そうしないでください。パラメータには日時型を使用し、引用符を追加しないでください。

コードの .Net 側を見せていただければ助かります。

于 2009-04-23T15:00:57.687 に答える
1

SP2またはSP3は、プロファイラーでこの問題を解決する必要があります

于 2009-11-26T15:17:09.290 に答える
0

私はあなたのデータベースクラスで問題を探します。おそらく、このAddInParameter()メソッドは、フォーマットされた文字列やそのようなばかげたものを追加するなど、DateTimeパラメーターを使用していくつかのジゲリーポケリーを実行します。

MSSQLで使用する場合は、CreateStoredProc()絶対にのインスタンスを返す必要がありますSqlCommand(使用したくないDbCommandの他のサブクラスがあります)。AddInParameter()次に、がのインスタンスをSqlParameterParametersコレクションに追加し、そのDbTypeプロパティがDbType.DateTimeであり、そのValueプロパティがタイプであることを確認しますSystem.DateTime

パラメータがに適切に追加されるとSqlCommand、MSSQLストアドプロシージャでも、DateTimeデータでもうまく機能するはずです(私にとっては、何十億回もあります)。

于 2009-11-26T15:27:17.990 に答える
0

これを試して:

'2009-04-30 00:00:00.000'

一重引用符と「.」に注意してください。ミリ秒の「:」の代わりに。またはこれを試してください:

'2009-04-30 00:00:00'

ミリ秒ではないことを確認します。

于 2009-04-23T14:55:30.383 に答える
0

私はちょうど同じことに遭遇しました - 2 つの一重引用符がプロファイラーにのみ表示されていたことが判明しました。根本的な (実際の) エラーは、ストアド プロシージャにあまりにも多くの引数を渡していたことです。

于 2010-06-09T05:30:09.087 に答える
0

objPropConsumer.MoveDate は文字列ですか? 先頭と末尾にアポストロフィを含む文字列が入力されているようです。objPropConsumer.MoveDate を定数 '2009-04-30 00:00:00' に置き換えてみて、それが機能するかどうかを確認してください。その場合、問題は MoveDate が設定または変換される場所にあります。

于 2009-04-25T00:29:27.270 に答える