c# - 当列为日期时间类型时,SQL Server 列作为参数

标签 c# sql-server datetime

我想使用 .net/C# 开发 Web 应用程序。我有一个 SQL Server 存储过程,我想传递动态日期时间参数。

当我使用 exec(@sql) 时,这里是带有参数的存储过程:

Error:System.Data.SqlClient.SqlException:
Conversion failed when converting datetime from character string.

我什至尝试传递一些实际值(见下文)并尝试在 SQL Server 中进行调试,但它不起作用。

谁能帮帮我?非常感谢。

ALTER PROCEDURE [dbo].[production_tb_WorkshopDailyReports_INSERT]
    @intDepartmentID int,
    @intReportUserID int,
    @intProductionLineID int,
    @intBatchID int,
    @intVINID int,
    @columnname nvarchar(255),
    @dtOnlineTime datetime,
    @strRemark nvarchar(50),
    @intCreateUserID int
AS
BEGIN
    declare @column nvarchar(255)
    declare @sql nvarchar(1000)
    declare @intID int

    set @columnname = 'dtOnlineTimeChassis'
    set @column = @columnname
    set @intDepartmentID = 1
    set @intReportUserID = 1
    set @intProductionLineID = 1
    set @intBatchID = 1
    set @intVINID = 1
    set @dtOnlineTime = '2016-04-26 10:00:00pm'
    set @strRemark = 'remark information'
    set @intCreateUserID = 1
    set @sql = 'Insert Into production_tb_WorkshopDailyReports (intDepartmentID, intReportUserID, intProductionLineID, intBatchID, intVINID,' + @column + ', strRemark, intCreateUserID) values ' + '(' + cast(@intDepartmentID as nvarchar(20)) + ',' + cast(@intReportUserID as nvarchar(20)) + ',' + cast(@intProductionLineID as nvarchar(20)) + ',' + cast(@intBatchID as nvarchar(20)) + ',' + cast(@intVINID as nvarchar(20)) + ',' + @dtOnlineTime + ',' + @strRemark + ',' + cast(@intCreateUserID as nvarchar(20)) + ')'
        (@intReportUserID as nvarchar(20))+','+cast(@intProductionLineID as nvarchar(20))+','+cast(@intBatchID as nvarchar(20))+','+cast(@intVINID as nvarchar(20))+','+''+','+cast(@intCreateUserID as nvarchar(20))+')'

    exec(@sql)
End

最佳答案

我猜这一切:

set @columnname = 'dtOnlineTimeChassis'
set @column = @columnname
set @intDepartmentID = 1
set @intReportUserID = 1
set @intProductionLineID = 1
set @intBatchID = 1
set @intVINID = 1
set @dtOnlineTime = '2016-04-26 10:00:00pm'
set @strRemark = 'remark information'
set @intCreateUserID = 1

只是为了测试 SP,其他时候 @columnname 变量会有一些不同。如果此声明为假,那么我建议使用简单的 INSERT 而不是动态 SQL。

首先改变这个:

',' + @dtOnlineTime + ',' + @strRemark + ','

对此:

 ',''' + CONVERT(nvarchar(50),@dtOnlineTime,120)+''',''' + @strRemark + ''','

我建议使用 120 日期样式(ODBC 规范 yyyy-mm-dd hh:mi:ss(24h),有关更多信息,请阅读 MSDN)和您必须将日期时间变量和带有注释的变量放入''

其次删除或注释这部分(set @sql = ... 之后的下一个字符串):

(@intReportUserID as nvarchar(20))+','+cast(@intProductionLineID as nvarchar(20))+','+cast(@intBatchID as nvarchar(20))+','+cast(@intVINID as nvarchar(20))+','+''+','+cast(@intCreateUserID as nvarchar(20))+')'

PRINT查询后,您将看到如下内容:

Insert Into production_tb_WorkshopDailyReports (intDepartmentID, intReportUserID, intProductionLineID, intBatchID, intVINID,dtOnlineTimeChassis, strRemark, intCreateUserID) values 
(1,1,1,1,1,'2016-04-26 22:00:00','remark information',1)

尝试执行它。

关于c# - 当列为日期时间类型时,SQL Server 列作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37041948/

相关文章:

c# - ASP.NET MVC4 教程/脚手架 - 验证和显示使用几种不同的语言环境

sql - 如何使用 JOIN 从表中获取最新行

sql - 在 PostgreSQL 中使用 EXCLUDE 防止相邻/重叠的条目

X 轴数据时间的 C# 图表缩放问题

c# - 将 PowerShell 包添加到 .netstandard2.0 类库

c# - 拒绝访问!?我无法从 C 驱动器上的安装文件夹中打开文件

sql - 查找序列词 SQL

javascript - 如何将 Datepicker 和 Timepicker 的值合并到一个变量中

c# - 防止用户控件中的 slider 在 WPF 中缩放

mysql - SQL : How to convert REPLACE INTO . ... SELECT .... FROM 从 MySQL 到 SQL Server 的查询?