Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换varchar值';时转换失败';到数据类型int_C#_Sql_Sql Server_Sql Server 2014 Express - Fatal编程技术网

C# 转换varchar值';时转换失败';到数据类型int

C# 转换varchar值';时转换失败';到数据类型int,c#,sql,sql-server,sql-server-2014-express,C#,Sql,Sql Server,Sql Server 2014 Express,当我尝试在CmdString中使用时,问题出现在可变小时内,该字符串正在引发异常。我不明白为什么在变量hour为string时抛出异常。我怎样才能解决这个问题。我错过了什么 string ConString = ConfigurationManager.ConnectionStrings["DbSystem"].ConnectionString; string CmdString = string.Empty; DateTime time = DateTime.Now; string hour

当我尝试在
CmdString中使用时,问题出现在可变小时内,该字符串正在引发异常。我不明白为什么在变量hour为string时抛出异常。我怎样才能解决这个问题。我错过了什么

string ConString = ConfigurationManager.ConnectionStrings["DbSystem"].ConnectionString;
string CmdString = string.Empty;

DateTime time = DateTime.Now;
string hour = time.Hour.ToString();

using (SqlConnection con = new SqlConnection(ConString))
{
    string folderName = DateTime.Now.Day.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Year.ToString();
    string folder = Path.Combine(FOLDER_FOR_BACKUP_FILES);
    Directory.CreateDirectory(FOLDER_FOR_BACKUP_FILES);

    CmdString = @"declare @fileName varchar(100); declare @dbName varchar(100); declare @fileDate varchar(20); set @fileName = '" + folder + @"\'; set @dbName = 'DbSystem'; set @fileDate = convert(varchar(20), getdate(), 105); set @fileName = @fileName + @dbName + ' ' + @fileDate + '-' + " + hour + @" + '.bak'; backup database @dbName to disk = @fileName;";

    SqlCommand cmd = new SqlCommand(CmdString, con);

    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable("*");
    sda.Fill(dt);
}

您应该
将时间转换为
VARCHAR

@fileDate + '-' + CONVERT(VARCHAR(20), " + hour + @") + '.bak';

虽然
hour
在应用程序端是一个字符串,但当SQL Server执行它时,它是一个
INT
。因此,您需要隐式包含一个
CONVERT
函数。

您应该
CONVERT
将您的小时数转换为
VARCHAR

@fileDate + '-' + CONVERT(VARCHAR(20), " + hour + @") + '.bak';

虽然
hour
在应用程序端是一个字符串,但当SQL Server执行它时,它是一个
INT
。因此,您需要隐式包含一个
CONVERT
函数。

您应该
CONVERT
将您的小时数转换为
VARCHAR

@fileDate + '-' + CONVERT(VARCHAR(20), " + hour + @") + '.bak';

虽然
hour
在应用程序端是一个字符串,但当SQL Server执行它时,它是一个
INT
。因此,您需要隐式包含一个
CONVERT
函数。

您应该
CONVERT
将您的小时数转换为
VARCHAR

@fileDate + '-' + CONVERT(VARCHAR(20), " + hour + @") + '.bak';

虽然
hour
在应用程序端是一个字符串,但当SQL Server执行它时,它是一个
INT
。因此,您需要隐式地包含一个
CONVERT
函数。

,因为小时现在是字符串。您可以将CmdString更改为

CmdString = @"declare @fileName varchar(100); declare @dbName varchar(100); declare @fileDate varchar(20); set @fileName = '" + folder + @"\'; set @dbName = 'DbSystem'; set @fileDate = convert(varchar(20), getdate(), 105); set @fileName = @fileName + @dbName + ' ' + @fileDate + '-' + '" + hour + @"' + '.bak'; backup database @dbName to disk = @fileName;";

因为时间已经过去了。您可以将CmdString更改为

CmdString = @"declare @fileName varchar(100); declare @dbName varchar(100); declare @fileDate varchar(20); set @fileName = '" + folder + @"\'; set @dbName = 'DbSystem'; set @fileDate = convert(varchar(20), getdate(), 105); set @fileName = @fileName + @dbName + ' ' + @fileDate + '-' + '" + hour + @"' + '.bak'; backup database @dbName to disk = @fileName;";

因为时间已经过去了。您可以将CmdString更改为

CmdString = @"declare @fileName varchar(100); declare @dbName varchar(100); declare @fileDate varchar(20); set @fileName = '" + folder + @"\'; set @dbName = 'DbSystem'; set @fileDate = convert(varchar(20), getdate(), 105); set @fileName = @fileName + @dbName + ' ' + @fileDate + '-' + '" + hour + @"' + '.bak'; backup database @dbName to disk = @fileName;";

因为时间已经过去了。您可以将CmdString更改为

CmdString = @"declare @fileName varchar(100); declare @dbName varchar(100); declare @fileDate varchar(20); set @fileName = '" + folder + @"\'; set @dbName = 'DbSystem'; set @fileDate = convert(varchar(20), getdate(), 105); set @fileName = @fileName + @dbName + ' ' + @fileDate + '-' + '" + hour + @"' + '.bak'; backup database @dbName to disk = @fileName;";

由于SQL注入,您应该使用参数化查询,而不是像这样构建命令字符串!看看这里的答案:由于SQL注入,您应该使用参数化查询,而不是像这样构建命令字符串!看看这里的答案:由于SQL注入,您应该使用参数化查询,而不是像这样构建命令字符串!看看这里的答案:由于SQL注入,您应该使用参数化查询,而不是像这样构建命令字符串!请看下面的答案: