为啥用string sql=String.Format()插入记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥用string sql=String.Format()插入记录相关的知识,希望对你有一定的参考价值。
有两种可能,第一种可能就是你这个段代码的string.format方法被重写了,可以自动的将一个字符串语句和id号翻译为sql的语句字符串。第二种可能就是sql变量这里只是最需要的sql语句的一部分,利用string.format方法仅仅想将整型id转化指定格式的字符串,作用相当于id.tostring("d2"). 参考技术A String.Format()是格式化字符串,就行C语言中的sprintf差不多。你不是想获得一个插入的sql语句吗?
String sql = String.format("insert into users values('%s',%d)",name,id);
//意思是在usrs表中插入记录 名字为 name ID号为id (name和id是已定义了的变量)。
其实和字符串的拼接差不多。 参考技术B 是格式化字符串,可以带参,比字符串拼接看着舒服!(字符串拼接容易丢失拼接符) 参考技术C string sql=string.Format("insert into users(Name,Age,Sex,Pwd)values (,,,)",myName,myAge,mySex,myPwd);
这些字段都是varchar 吗 varchar 要用''号
string sql=string.Format("insert into users(Name,Age,Sex,Pwd)values ('','','','')",myName,myAge,mySex,myPwd);
SQL Server 字符串在插入时用空格填充 - 为啥?
【中文标题】SQL Server 字符串在插入时用空格填充 - 为啥?【英文标题】:SQL Server Strings Padded with Whitespace on Insert - why?SQL Server 字符串在插入时用空格填充 - 为什么? 【发布时间】:2012-03-21 03:29:54 【问题描述】:当我尝试将一些数据插入 SQL Server 时,出现了这些额外的字符
例如我的textBox1.text == "SAMPLE"
那么这就是代码
string qry = "insert into FinalImages (FinalImageName, Date) values(@FinalImageName, @Date)";
SqlConnection c = new SqlConnection(c_string);
//Initialize SqlCommand object for insert
SqlCommand SqlCom = new SqlCommand(qry, c);
SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, 40)).Value = textBox1.Text;
SqlCom.Parameters.Add(new SqlParameter("@Date", SqlDbType.Char, 40)).Value = DateTime.Now.ToString("MM/dd/yyyy");
但是当我检查表格时,记录是 "SAMPLE "
,它添加了 34 个空格字符
应该有什么问题?
【问题讨论】:
你赢得了本周最差冠军奖。 相关帖子 - Why are values stored in an NVARCHAR column sometimes padded with trailing spaces? 【参考方案1】:不要使用 SqlDbType.Char,使用 NVarChar。 Char 是一个固定大小的字符串,用空格填充(一个可怕的怪物)。
【讨论】:
【参考方案2】:您选择了CHAR(40)
作为参数类型。你的意思是VARCHAR(40)
。
【讨论】:
【参考方案3】:您正在使用char(40)
。这样,您将始终拥有一个长度为 40 的字符串。如果它更短,SQL-Server 将自动用空格填充其余部分。
Char 通常只用于固定长度的数据,例如客户编号
在这种情况下,您想使用varchar(40)
来获得可变长度。
【讨论】:
【参考方案4】:您指定参数长度为 40 个字符,而不是可变长度:
SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, ***40***)).Value = textBox1.Text;
所以它有助于填充您提供的值。
只使用不带长度参数的重载,使用VarChar:
SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.VarChar)).Value = textBox1.Text;
【讨论】:
【参考方案5】:运行
设置 ANSI_PADDING 关闭;
去
更全面的信息是SET ANSI_PADDING
如果您这样做,您将需要更新所有现有记录以使用 ltrim()/rtrim() 删除填充,因为关闭填充不会影响现有记录 RTRIM (Transact-SQL)
【讨论】:
以上是关于为啥用string sql=String.Format()插入记录的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MySQL 和 JPA 会发生“java.sql.SQLException: Incorrect string value...”
为啥我不能用字符串为 Dictionary<String, Int> 下标?
为啥即使指定了所有值,Spark SQL 也会为字符串列打开可为空?