C#varchar转换成int类型报错

为什么一直说我的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语句,才能知道到底是哪个字段有问题

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7454452
  • 这篇博客你也可以参考下:数据库中对varchar类型数据排序的方法
  • 除此之外, 这篇博客: 【C#】使用C#快速将varchar全部修改为nvarchar中的 实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 修改字段的数据类型的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格式要和数据库对上