SQL Server 2012 Express のストアド プロシージャを C# プログラムから呼び出して、DateTime データ型を列 (これも datetime) に挿入しようとしています。
なぜか「日付や時刻を文字列から変換するときに会話に失敗しました」というエラーが表示され続けます。
us_english に設定されている SQL サーバーのカルチャ設定を確認しましたが、日時形式は ISO 標準です。
ストアド プロシージャのコードを次に示します。値は、C# アプリによって渡される方法とまったく同じです。
USE testdb;
DECLARE @Name NVARCHAR(50) = 'Somename',
@Location NVARCHAR(50) = 'somelocation',
@Date DateTime = '2013-10-11 11:00:05.000'
BEGIN
SET NOCOUNT ON;
SELECT @Name, @Location, @Date
if exists (select name from ComputerHistory where name = @Name)
begin
DECLARE @Query1 NVARCHAR(MAX)
if @Location <> 'disconnected'
begin
set @Query1 = '
update ComputerHistory
set ' + @Location + ' = 1 + ISNULL((select MAX(' + @Location + ') from ComputerHistory where name = ''' + @Name + '''),0),
lastdateonline = ''' + @Date + '''
where name = ''' + @Name + '''
'
--EXEC sp_executesql @Query1
end
else
begin
set @Query1 = '
update ComputerHistory
set ' + @Location + ' = 1 + ISNULL((select MAX(' + @Location + ') from ComputerHistory where name = ''' + @Name + '''),0)
where name = ''' + @Name + '''
'
EXEC sp_executesql @Query1
end
end
else
begin
DECLARE @Query2 NVARCHAR(150)
set @Query2 = 'insert into ComputerHistory(name, ' + @Location + ') VALUES(''' + @Name + ''', ''1'')'
EXEC sp_executesql @Query2
end
END