将 varchar 值 '..' 转换为数据类型 int 时转换失败
Conversion failed when converting the varchar value '..' to data type int
当我尝试在 CmdString
中使用时,问题出在可变小时抛出异常。我不明白为什么当变量 hour 是字符串时抛出异常。我怎么解决这个问题。我在这里缺少什么。
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);
}
你应该 CONVERT
你的时间到 VARCHAR
:
@fileDate + '-' + CONVERT(VARCHAR(20), " + hour + @") + '.bak';
虽然hour
在应用程序端是一个字符串,但是当它被SQL服务器执行时,它是一个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
中使用时,问题出在可变小时抛出异常。我不明白为什么当变量 hour 是字符串时抛出异常。我怎么解决这个问题。我在这里缺少什么。
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);
}
你应该 CONVERT
你的时间到 VARCHAR
:
@fileDate + '-' + CONVERT(VARCHAR(20), " + hour + @") + '.bak';
虽然hour
在应用程序端是一个字符串,但是当它被SQL服务器执行时,它是一个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;";