首页 新闻 会员 周边 捐助

c#怎么将bigint类型的数据插入到sql当中?

0
悬赏园豆:40 [已解决问题] 解决于 2018-12-14 10:13

我从ACCESS中取到数据存到Datatable中,然后用sqlbulkcopy插入到SQL,但是ACCESS数据库中有的类型是bigint无法插入到SQL中,该怎么解决??

Gilgamos的主页 Gilgamos | 初学一级 | 园豆:148
提问于:2018-12-12 10:29
< >
分享
最佳答案
0

没有找到为什么插不了,access的数据都是int或者float类型,查到Datatable中都是object类型,但是使用sqlbuckcopy插入到sql数据库就提示有string类型无法转换成bigint,或者float类型,最后只能用SQL语句单独将报错的表插入进去。

Gilgamos | 初学一级 |园豆:148 | 2018-12-14 10:11
其他回答(2)
0

试试把bigint 转换成long 类型

收获园豆:10
画笔灬 | 园豆:920 (小虾三级) | 2018-12-12 10:38

我遍历了Datatable的每一列的类型,如果是bigint就转换,但是好像没用

支持(0) 反对(0) Gilgamos | 园豆:148 (初学一级) | 2018-12-12 10:42

@Gilgamos: 打个断点进去看看转换成功没,然后看下报的错误是什么

支持(0) 反对(0) 画笔灬 | 园豆:920 (小虾三级) | 2018-12-12 10:44

@面具灬: 突然发现是sql中的表是bigint类型,string类型的值无法插进去。。

支持(0) 反对(0) Gilgamos | 园豆:148 (初学一级) | 2018-12-12 11:10

@Gilgamos: 字符串和数值。。。

支持(0) 反对(0) 画笔灬 | 园豆:920 (小虾三级) | 2018-12-12 11:15
0

SQL Server 本来就支持 bigint 类型,C# 对应的类型是 Int64 ,如果 SQL Server 中对应的字段不是 bigint 类型,才需要转换

收获园豆:30
dudu | 园豆:30775 (高人七级) | 2018-12-12 11:00

恩,发现了。。sql中表的类型是bigint,然而我取到的值好像有string类型的

支持(0) 反对(0) Gilgamos | 园豆:148 (初学一级) | 2018-12-12 11:17

@Gilgamos: Int64.Parse() 转换一下

支持(0) 反对(0) dudu | 园豆:30775 (高人七级) | 2018-12-12 11:52

@dudu: 在包含数据的情况下无法转换类型。。。

支持(0) 反对(0) Gilgamos | 园豆:148 (初学一级) | 2018-12-12 12:01

@Gilgamos: 建议提供对应的代码

支持(0) 反对(0) dudu | 园豆:30775 (高人七级) | 2018-12-12 12:24

@dudu: for (int j=0;j<dd.Rows.Count-1;j++)
{
object value = dd.Rows[j]["name"].ToString();
OleDbDataAdapter inst = new OleDbDataAdapter("SELECT * FROM "+ value + "", dbconn);//选择全部内容
DataTable ds = new DataTable();//临时存储
inst.Fill(ds);//用inst填充ds
foreach (System.Data.DataColumn k in ds.Columns)
{
if (k.DataType == typeof(long))
{
k.DataType = typeof(long);

                }
            }
支持(0) 反对(0) Gilgamos | 园豆:148 (初学一级) | 2018-12-12 12:40

@Gilgamos: 提供的代码不够

支持(0) 反对(0) dudu | 园豆:30775 (高人七级) | 2018-12-12 14:50

@dudu: {
string Con = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\jzl\Samples - 副本\13米空心板.mdb";//第二个参数为文件的路径
OleDbConnection dbconn = new OleDbConnection(Con);
OleDbConnection dbconn2 = new OleDbConnection(Con);
dbconn.Open();//建立连接

        OleDbDataAdapter inst2 = new OleDbDataAdapter("SELECT name FROM msysobjects WHERE type=1 and flags=0", dbconn2);//选择全部内容
        DataTable dd = new DataTable();//临时存储
        inst2.Fill(dd);//用inst填充ds
        string Pid = "JZL" + GenerateRandomCode(10);

        dd.Rows.RemoveAt(20);
        dd.Rows.RemoveAt(21);
        dd.Rows.RemoveAt(31);
        DataTable dt = dd;
        for (int j = 0; j < dd.Rows.Count - 1; j++) 
        {
            object value = dd.Rows[j]["name"].ToString();
            OleDbDataAdapter inst = new OleDbDataAdapter("SELECT * FROM "+ value + "", dbconn);//选择全部内容
            DataTable ds = new DataTable();//临时存储
            inst.Fill(ds);//用inst填充ds
                          ////foreach (System.Data.DataColumn k in ds.Columns)
                          ////{
                          ////    if (k.DataType == typeof(long))
                          ////    {
                          ////        k.DataType = typeof(long);

            ////    }
            ////}
            DataColumn dc = new DataColumn("F_ID", typeof(string));
            ds.Columns.Add(dc);
            DataColumn dc1 = new DataColumn("F_ProjectID", typeof(string));
            ds.Columns.Add(dc1);
            DataColumn dc2 = new DataColumn("F_SortCode", typeof(int));
            ds.Columns.Add(dc2);
            DataColumn dc3 = new DataColumn("F_DeleteMark", typeof(int));
            ds.Columns.Add(dc3);
            DataColumn dc4 = new DataColumn("F_EnabledMark", typeof(int));
            ds.Columns.Add(dc4);
            DataColumn dc5 = new DataColumn("F_Description", typeof(string));
            ds.Columns.Add(dc5);
            DataColumn dc6 = new DataColumn("F_CreateDate", typeof(DateTime));
            ds.Columns.Add(dc6);
            DataColumn dc7 = new DataColumn("F_CreateUserId", typeof(string));
            ds.Columns.Add(dc7);
            DataColumn dc8 = new DataColumn("F_CreateUserName", typeof(string));
            ds.Columns.Add(dc8);
            DataColumn dc9 = new DataColumn("F_ModifyDate", typeof(string));
            ds.Columns.Add(dc9);
            DataColumn dc10 = new DataColumn("F_ModifyUserId", typeof(string));
            ds.Columns.Add(dc10);
            DataColumn dc11 = new DataColumn("F_ModifyUserName", typeof(DateTime));
            ds.Columns.Add(dc11);

            for (int i = 0; i <= ds.Rows.Count - 1; i++)
            {
                string id = "JZL" + GenerateRandomCode(10);

                ds.Rows[i]["F_ID"] = id;
                ds.Rows[i]["F_ProjectID"] = Pid;
                ds.Rows[i]["F_CreateDate"] = DateTime.Now;
            }
           /* dataGridView1.DataSource = ds;*///展示ds第一张表到dataGridView1控件

            string conn = ("Data Source=.;Initial Catalog=WPFramework_Base_2019;User ID=sa;Password=sa");
            SqlBulkCopyInsert(conn, value.ToString(), ds);
        }
        dbconn.Close();//关闭连接

    }

public static void SqlBulkCopyInsert(string conStr, string strTableName, DataTable dtData)
{
try
{
using (SqlBulkCopy sqlRevdBulkCopy = new SqlBulkCopy(conStr)) //引用SqlBulkCopy
{
sqlRevdBulkCopy.DestinationTableName = strTableName; //数据库中对应的表名
sqlRevdBulkCopy.NotifyAfter = dtData.Rows.Count; //有几行数据
sqlRevdBulkCopy.WriteToServer(dtData); //数据导入数据库
sqlRevdBulkCopy.Close(); //关闭连接
}
}
catch (Exception ex)
{
throw (ex);
}
}

支持(0) 反对(0) Gilgamos | 园豆:148 (初学一级) | 2018-12-12 14:52

@Gilgamos: 那个字段的类型是 bigint ?

支持(0) 反对(0) dudu | 园豆:30775 (高人七级) | 2018-12-12 15:23

@dudu: 这个是把数据插入到SQL里面,然后SQL里面有的表的字段类型是BIGINT,数据是从ACCESS里面查出来的

支持(0) 反对(0) Gilgamos | 园豆:148 (初学一级) | 2018-12-12 15:25

@Gilgamos: 假如 F_ProjectID 是 bigint 类型的字段,则改为下面的代码:

DataColumn dc1 = new DataColumn("F_ProjectID", typeof(long));
支持(0) 反对(0) dudu | 园豆:30775 (高人七级) | 2018-12-12 20:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册