为什么一直说我的varchar类型转换成int类型错误,我是改的地方对么
using (SqlCommand command = new SqlCommand(sql, connection))
{
// 添加参数并设置值
command.Parameters.AddWithValue("@Value1", value1);
command.Parameters.AddWithValue("@Value3", value3);
object id = selectedNode.GetValue("ID");
int idint = int.Parse(id.ToString());
}
varchar是数据库里的类型,不是c#里的类型
放出表结构和sql语句,才能知道到底是哪个字段有问题
修改字段的数据类型的sql语句
alter table 表名 alter column 列名 nvarchar(长度)
但是字段可能存在约束,无法修改成功,所以要先删除约束
如果存在约束,则删除约束
if exists(select * from sysobjects where name='约束名')
alter table 表名 drop constraint 约束名
接下来,我们需要获取数据库所有的用户表
select name from sysobjects where xtype = 'U'
获取一个表字段名称,字段数据类型,长度,只查询varchar的字段
select syscolumns.name as fieldName ,systypes.name as fieldType,syscolumns.length as leng
from syscolumns inner join systypes on systypes.xtype=syscolumns.xtype
where id=(select id from sysobjects where name='表名') and systypes.name ='varchar'
当查询出来的长度为-1时,表示去最大值MAX
C#中的代码
string sqlTables = "select name from sysobjects where xtype = 'U'";
//获取所有用户表
DataTable tables = SqlHelper.ExecuteDataTable(ConnectionString, sqlTables);
for (int i = 0; i < tables.Rows.Count; i++)
{
//表名
string tableName = tables.Rows[i][0].ToString();
string sqlFields = @"select syscolumns.name as fieldName ,systypes.name as fieldType,syscolumns.length as leng
from syscolumns inner join systypes on systypes.xtype=syscolumns.xtype
where id=(select id from sysobjects where name='" + tableName + "') and systypes.name ='varchar' ";
//获取一个表的所有字段的名称,字段数据类型,长度
DataTable fieldInfos = SqlHelper.ExecuteDataTable(ConnectionString, sqlFields);
try
{
for (int j = 0; j < fieldInfos.Rows.Count; j++)
{
string fieldName = fieldInfos.Rows[j][0].ToString();//名称
string fieldType = fieldInfos.Rows[j][1].ToString();//类型
int leng = int.Parse(fieldInfos.Rows[j][2].ToString());//长度
StringBuilder sbFields = new StringBuilder();
string constraintName = "DF_" + tableName + "_" + fieldName;//约束
sbFields.Append(" if exists(select * from sysobjects where name='" + constraintName + "') ");
sbFields.Append(" alter table " + tableName + " drop constraint " + constraintName);
sbFields.Append(" alter table " + tableName + " alter column " + fieldName + " nvarchar(" + (leng == -1 ? "MAX" : (leng * 2).ToString()) + ") ");
SqlHelper.ExecuteNonQuery(ConnectionString, sbFields.ToString());
}
}
catch
{
}
}
其中,我的SqlHelper
完成
你传进去的value1和value3格式要和数据库对上