Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “字符串”不包含“连接”的定义_C#_Asp.net Mvc 5_Entity Framework 6_Epplus_Sqlconnection - Fatal编程技术网

C# “字符串”不包含“连接”的定义

C# “字符串”不包含“连接”的定义,c#,asp.net-mvc-5,entity-framework-6,epplus,sqlconnection,C#,Asp.net Mvc 5,Entity Framework 6,Epplus,Sqlconnection,我正在尝试使用MVC5中的Epplus库和C中的Entity framework 6将和excel文件导入我的sql数据库。我收到了此错误。我知道我获取连接字符串的方式不正确 我在“连接”的等待新bulkwriter线路上收到错误信息 public async Task<ActionResult> StructureAsync(FormCollection postedFile) { var usersList = new List<bomStruct

我正在尝试使用MVC5中的Epplus库和C中的Entity framework 6将和excel文件导入我的sql数据库。我收到了此错误。我知道我获取连接字符串的方式不正确

我在“连接”的等待新bulkwriter线路上收到错误信息

 public async Task<ActionResult> StructureAsync(FormCollection postedFile)
    {
        var usersList = new List<bomStructuredImportTgt>();
        if (Request != null)
        {
            HttpPostedFileBase file = Request.Files["postedFile"];
            if ((file != null) && (file.ContentLength > 0) && !string.IsNullOrEmpty(file.FileName))
            {
                string fileName = file.FileName;
                string fileContentType = file.ContentType;
                byte[] fileBytes = new byte[file.ContentLength];
                var data = file.InputStream.Read(fileBytes, 0, Convert.ToInt32(file.ContentLength));
                using (var package = new ExcelPackage(file.InputStream))
                {
                    var currentSheet = package.Workbook.Worksheets;
                    var workSheet = currentSheet.First();
                    var noOfCol = workSheet.Dimension.End.Column;
                    var noOfRow = workSheet.Dimension.End.Row;
                    for (int rowIterator = 2; rowIterator <= noOfRow; rowIterator++)
                    {
                        var user = new bomStructuredImportTgt();
                        user.ACTUAL_DATE = Convert.ToDateTime(workSheet.Cells[rowIterator, 1].Value);
                        user.DESCRIPTION = workSheet.Cells[rowIterator, 2].Value?.ToString();
                        user.LEVEL = Convert.ToInt32(workSheet.Cells[rowIterator, 3].Value);
                        user.PARENT_PARTNO = workSheet.Cells[rowIterator, 4].Value?.ToString();
                        user.PART_NO = workSheet.Cells[rowIterator, 5].Value?.ToString();
                        user.PART_NAME = workSheet.Cells[rowIterator, 6].Value?.ToString();
                        user.HNS = workSheet.Cells[rowIterator, 7].Value?.ToString();
                        user.DWGSZ = workSheet.Cells[rowIterator, 8].Value?.ToString();
                        user.PART = workSheet.Cells[rowIterator, 9].Value?.ToString();
                        user.L1QTY = Convert.ToInt32(workSheet.Cells[rowIterator, 10].Value);
                        user.COLORM = workSheet.Cells[rowIterator, 11].Value?.ToString();
                        user.ATTCD = workSheet.Cells[rowIterator, 12].Value?.ToString();
                        user.KD = workSheet.Cells[rowIterator, 13].Value?.ToString();
                        user.SELL = workSheet.Cells[rowIterator, 14].Value?.ToString();
                        user.PL_GROUP = workSheet.Cells[rowIterator, 15].Value?.ToString();
                        user.PL1 = workSheet.Cells[rowIterator, 16].Value?.ToString();
                        user.AT1 = workSheet.Cells[rowIterator, 17].Value?.ToString();
                        user.PL2 = workSheet.Cells[rowIterator, 18].Value?.ToString();
                        user.AT2 = workSheet.Cells[rowIterator, 19].Value?.ToString();
                        user.PL3 = workSheet.Cells[rowIterator, 20].Value?.ToString();
                        user.PLANT = workSheet.Cells[rowIterator, 21].Value?.ToString();
                        user.SHRPCMINMAX = workSheet.Cells[rowIterator, 22].Value?.ToString();
                        usersList.Add(user);
                    }
                }
            }
        }

        using (SqlConnection excelImportDBEntities = new SqlConnection("Dev_Purchasing_New_ModelEntities"))
        {

            await new BulkWriter().InsertAsync(usersList, "bomStructuredImportTgt", excelImportDBEntities.Database.Connection, CancellationToken.None);
        }
        return View("Structure");
    }

  public class BulkWriter
    {
        private static readonly ConcurrentDictionary<Type, SqlBulkCopyColumnMapping[]> ColumnMapping =
            new ConcurrentDictionary<Type, SqlBulkCopyColumnMapping[]>();

        public async Task InsertAsync<T>(IEnumerable<T> items, string bomStructuredImportTgt, SqlConnection excelImportDBEntities,
            CancellationToken cancellationToken)
        {
            using (var bulk = new SqlBulkCopy(excelImportDBEntities))
            using (var reader = ObjectReader.Create(items))
            {
                bulk.DestinationTableName = bomStructuredImportTgt;
                foreach (var colMap in GetColumnMappings<T>())
                    bulk.ColumnMappings.Add(colMap);
                await bulk.WriteToServerAsync(reader, cancellationToken);
            }
        }

        private static IEnumerable<SqlBulkCopyColumnMapping> GetColumnMappings<T>() =>
            ColumnMapping.GetOrAdd(typeof(T),
                type =>
                    type.GetProperties()
                        .Select(p => new SqlBulkCopyColumnMapping(p.Name, p.Name)).ToArray());
    }
我有一个BulkWriter类,用于批量复制sql中的记录。我想使用这个类来提高代码的时间效率。

试试这个:

string connectionString = ConfigurationManager.ConnectionStrings["Dev_Purchasing_New_ModelEntities"].ConnectionString;
using (SqlConnection excelImportDBEntities = new SqlConnection(connectionString)){
   ...
}
由于excelImportDBEntities变量的类型为SqlConnection,因此它具有数据库属性。该属性返回一个字符串—此连接所连接的数据库的名称。当然,您无法从数据库名称获取.Connection,并且在尝试获取时会出现编译错误

那么,如何修复它。您的BulkWriter的InsertAsync方法在这里需要SqlConnection对象,而您已经有了这个对象ExcelImportBenties。为什么不直接使用它呢?替换

await new BulkWriter().InsertAsync(usersList, "bomStructuredImportTgt", excelImportDBEntities.Database.Connection, CancellationToken.None);

这个错误应该消失


另一个问题是,正如其他答案和评论中所提到的,您似乎错误地处理了连接字符串,这将在编译和运行代码后产生错误。

开发人员购买新的模型实体是什么?如果它是web.config中连接字符串的名称,那么您应该自己检索它:ConfigurationManager.ConnectionString[Dev_Purchasing_New_ModelEntities]是连接字符串中的名称\像这样?使用SqlConnection excelImportDBEntities=ConfigurationManager.ConnectionString[Dev_Purchasing_New_ModelEntities]{Wait New BulkWriter.InsertAsyncusersList、bomStructuredImportTgt、excelImportDBEntities.Database.Connection、CancellationToken.None;}返回ViewStructure;至于为什么会出现这种特定错误,ExcelImportDBenties.Database是一种字符串类型。字符串没有连接属性。我也尝试过这样做,var consting=ConfigurationManager.ConnectionString[Dev\u Purchasing\u New\u ModelEntities].ConnectionString;使用SqlConnection excelImportDBEntities=new SqlConnectionconString{Wait new BulkWriter.InsertAsyncusersList、bomStructuredImportTgt、excelImportDBEntities.Database.Connection、CancellationToken.None;}string connectionString=ConfigurationManager.connectionString[Dev_Purchasing_New_ModelEntities].ConnectionString;使用SqlConnection excelImportDBEntities=New SqlConnectionconnectionString{Wait New BulkWriter.InsertAsyncusersList,bomStructuredImportTgt,excelImportDBEntities.Database.Connection,CancellationToken.None;}你试过调试这个吗?connectionString变量的值是多少?你的配置中有有效的连接字符串吗?是的,我在Webconfig中有一个有效的连接字符串,名为Dev_Purchasing_New_modelenties我现在试着用这种方式传递我的连接字符串,string connectionString=ConfigurationManager.ConnectionStRing[Dev_Purchasing\u New_ModelEntities].ConnectionString;使用SqlConnection excelImportDBEntities=New SqlConnectionconnectionString{Wait New BulkWriter.InsertAsyncusersList,bomStructuredImportTgt,excelImportDBEntities,CancellationToken.None;}这个错误现在已经消失了,但是仍然不起作用。谢谢,我会接受这个答案。
await new BulkWriter().InsertAsync(usersList, "bomStructuredImportTgt", excelImportDBEntities, CancellationToken.None);