Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
GENDALF_ISTARI
12 / 29 / 19
Регистрация: 20.08.2013
Сообщений: 717
1

Подключение SQL Server без Web.config

05.09.2016, 15:27. Просмотров 1352. Ответов 4
Метки нет (Все метки)

ASP MVC Подключения SQL Server без Web.config несколько вариантов
Дело пойдет о подключении базы
Я делал подключение Web.config все работает
но теперь лучше сделать класс что подключет базу
строкой , или значениями класса по атрибутам DataSourse,Host,Password и так далее
ведь когда тестил , все правильно написал
то когда дело дошло к выводу данных с таблице
я получил ошибку типа
Login ......... Password и так далее
И конечно же и вывод ошибки, в случаи провала подключения

Надеюсь кто то поможет поправить это дело

Настраиваем Microsoft SQL Server 2014
1) Заходим под Именем сервера у меня это такое
Server Name: SITY_PC

Жмем свойства Server Properties -> потом Security
выставляем SQL Server and Windows Authentication mode
это нужно, входа в созданную базу, под Логином и Паролем
Перезагружаем сервер Microsoft SQL Server 2014 нажав SITY_PC правой кнопкой мыши , Restart - соглашаемся на все OK
Сервер перезагружаеться приняв новые настройки

2) Заходим в Logins->NT AUTHORITY\система
жмем правой кнопкой мыши по NT AUTHORITY\система , выбираем Properties
там выбираем Server Roles, ставим птичку напротив sysadmin

3) Для удобства добавляем нумерацию строк скриптинга Microsoft SQL Server 2014
Tools->Options->Text Editor->All Languages
напротив Lines numbers поставим галочку
таким образом когда когда будете писать скрипт T-SQL
будут нумеровать строки , и в случаи ошибки будет определена строка ошибки
и вы легко можете пролистав номера строк найти строку ошибки, и править скрипт
4) Готово


Теперь о Главном
Создадим базу с готовой таблицей
1) Вот скрипт

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE DATABASE [Economics]
 
USE [Economics]
GO
 
/****** Object:  Table [dbo].[TABLE_ECONOMIC]    Script Date: 05.09.2016 11:33:10 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[TABLE_ECONOMIC](
    [ID_ECONOMIC] [int] IDENTITY(1,1) NOT NULL,
    [TEXT] [nvarchar](3600) NOT NULL,
    [COST] [money] NOT NULL,
 CONSTRAINT [PK_TABLE_ECONOMIC] PRIMARY KEY CLUSTERED 
(
    [ID_ECONOMIC] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
 
GO
2) Создаем проект SQL_Server_Connect_Test_All зарание подключаем Entity Framework 5.0
Создадим Контроллер Controllers/HomeController.cs
стандарт ничего не меняем
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace SQL_Server_Connect_Test_All.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
 
        public ActionResult Index()
        {
            return View();
        }
 
    }
}
3) Создадим класс таблицы Tables/TABLE_ECONOMIC.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
 
namespace SQL_Server_Connect_Test_All.Tables
{
    [Table("TABLE_ECONOMIC")]
    public class TABLE_ECONOMIC
    {
        [Key]
        public int ID_ECONOMIC { get; set; }
 
        [Required]
        [Display(Name = "Текст Економики")]
        public string TEXT { get; set; }
 
        [Required]
        [Display(Name = "Стоймость")]
        public double COST { get; set; }
    }
}


4) Нажав ActionResult Index() создаем представление Add View...
Тут и воротим вывод данных

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@using SQL_Server_Connect_Test_All.Models
@using SQL_Server_Connect_Test_All.Tables
@{
    ViewBag.Title = "Index";
    ManadgerDB manadgerDb=new ManadgerDB();
}
 
<h2>Index</h2><br/>
<h3>Данные Базы</h3><br/><br/>
@{
    foreach (TABLE_ECONOMIC obj in manadgerDb.GET_OBJECTS())
    {
         <p>1) @obj.TEXT = @obj.COST $</p>
    }
}
5) Создаем класс что будет выступать как подключения, и вывод данных с базы
Класс перчик все в одном))
Models/ManadgerDB.cs
Это один вариант

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using SQL_Server_Connect_Test_All.Tables;
 
namespace SQL_Server_Connect_Test_All.Models
{
    interface IRepository_Manadger<T> : IDisposable
    {
        IEnumerable<TABLE_ECONOMIC> GET_OBJECTS();
        SqlErrorCollection GET_ERROR_SQL();
    }
 
    public class ManadgerDB : IRepository_Manadger<TABLE_ECONOMIC>
    {
        private DB_Context db;
 
        public ManadgerDB()
        {
            string str_connect = @"Data Source=SITY_PC; Initial Catalog=Economics; Integrated Security=true; User ID=PUTIN_IS_KNDR_KOREA; Password=#tyranny";
            this.db = new DB_Context(str_connect);
        }
 
        //Колекция обьектов
        public IEnumerable<TABLE_ECONOMIC> GET_OBJECTS()
        {
            return db.TableEconomics;
        }
 
        //Возвращаем ошибки
        public SqlErrorCollection GET_ERROR_SQL()
        {
            return db.Error_Connect;
        }
 
        public void Dispose()
        {
            db.Dispose();
        }
    }
 
    //Контекст подключения
    public class DB_Context : DbContext
    {
        public SqlErrorCollection Error_Connect { get; set; }
        public DbSet<TABLE_ECONOMIC> TableEconomics { get; set; }
        //Имя подключения к базе
        public DB_Context() : base("Primaryconect")
        {
 
        }
 
        //Подключаем строку
        public DB_Context(string connection_str)
        {
            try
            {
                Database.Connection.ConnectionString = connection_str;
            }
            catch (SqlException ex)
            {
 
                Error_Connect = ex.Errors;
            }
           
        }
    }
}
Результат этого применения Ошибка

System.InvalidOperationException was unhandled by user code
HResult=-2146233079
Message=The 'COST' property on 'TABLE_ECONOMIC' could not be set to a 'Decimal' value. You must set this property to a non-null value of type 'Double'.
Source=System.Data.Entity
StackTrace:
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\Sity\Documents\Visual Studio 2010\Projects\SQL_Server_Connect_Test_All\SQL_Server_Connect_Test_All\Views\Home\Index.cshtml:line 11
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.StartPage.RunPage()
at System.Web.WebPages.StartPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
InnerException:


6) Второй вариант Models/ManadgerDB_2.cs
с кодом , достаточно в Index.cshtml поменять класс ManadgerDB_2 manadgerDb=new ManadgerDB_2();
мы запустим и увидем результат

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using SQL_Server_Connect_Test_All.Tables;
 
namespace SQL_Server_Connect_Test_All.Models
{
    interface IRepository_Manadger2<T> : IDisposable
    {
        IEnumerable<TABLE_ECONOMIC> GET_OBJECTS();
        SqlErrorCollection GET_ERROR_SQL();
    }
 
    public class ManadgerDB_2 : IRepository_Manadger2<TABLE_ECONOMIC>
    {
        private DB_Context2 db;
 
        public ManadgerDB_2()
        {
            //Подключаем автоматоматически
            this.db = new DB_Context2();
        }
 
        //Колекция обьектов
        public IEnumerable<TABLE_ECONOMIC> GET_OBJECTS()
        {
            return db.TableEconomics;
        }
 
        //Возвращаем ошибки
        public SqlErrorCollection GET_ERROR_SQL()
        {
            return db.Error_Connect;
        }
 
        public void Dispose()
        {
            db.Dispose();
        }
    }
 
    //Контекст подключения
    public class DB_Context2 : DbContext
    {
        SqlConnectionStringBuilder connectStringBuilder = new SqlConnectionStringBuilder();
        SqlConnection conn;
        SqlCommand comm;
 
        public SqlErrorCollection Error_Connect { get; set; }
        public DbSet<TABLE_ECONOMIC> TableEconomics { get; set; }
 
        //Имя подключения к базе, все в одном
        public DB_Context2() : base("Primaryconect2")
        {
            try
            {
                connectStringBuilder.DataSource = "SITY_PC";
                connectStringBuilder.InitialCatalog = "Economics";
                connectStringBuilder.Encrypt = true;
                connectStringBuilder.TrustServerCertificate = true;
                connectStringBuilder.ConnectTimeout = 30;
                connectStringBuilder.AsynchronousProcessing = true;
                connectStringBuilder.MultipleActiveResultSets = true;
                connectStringBuilder.IntegratedSecurity = true;
                connectStringBuilder.UserID = "PUTIN_IS_KNDR_KOREA";
                connectStringBuilder.Password = "#tyranny";
 
                conn = new SqlConnection(connectStringBuilder.ToString());
                //Передаем строку подключения
                Database.Connection.ConnectionString = conn.ConnectionString;
            }
            catch (SqlException ex)
            {
 
                Error_Connect = ex.Errors;
            }
        }
 
    }
}
Результат этого выполнения Ошибка

System.InvalidOperationException was unhandled by user code
HResult=-2146233079
Message=The 'COST' property on 'TABLE_ECONOMIC' could not be set to a 'Decimal' value. You must set this property to a non-null value of type 'Double'.
Source=System.Data.Entity
StackTrace:
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\Sity\Documents\Visual Studio 2010\Projects\SQL_Server_Connect_Test_All\SQL_Server_Connect_Test_All\Views\Home\Index.cshtml:line 11
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.StartPage.RunPage()
at System.Web.WebPages.StartPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
InnerException:

Пример прикрепил SQL_Server_Connect_Test_All.rar
Базу тоже Economics.rar уже есть данные

Вот и думай как же правильно , что не так ?
0
Вложения
Тип файла: rar SQL_Server_Connect_Test_All.rar (9.00 Мб, 8 просмотров)
Тип файла: rar Economics.rar (280.7 Кб, 2 просмотров)
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2016, 15:27
Ответы с готовыми решениями:

Подключение к базе данных web config
Делаю по следующему образцу &lt;connectionStrings&gt; &lt;add name=&quot;ApplicationServices&quot;...

Подключение к MS SQL Server
Не получается подключиться к MS SQL Server. Ввожу такую строку подключения. ...

[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection
Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection Вот...

Подключение к базе VB+SQL Server
Раньше я писал программы на VB+SQL Server, а сейчас пробую на ASP. Подскажите нормальное ли это...

Программное подключение к бд sql server
У меня есть проект на С# в нём лежит бд sql server. Мне необходимо программно подключить бд к...

4
GENDALF_ISTARI
12 / 29 / 19
Регистрация: 20.08.2013
Сообщений: 717
06.09.2016, 14:56  [ТС] 2
Лучший ответ Сообщение было отмечено Metall_Version как решение

Решение

Ох книжные черви))) молчите

Добавлено через 14 минут
Ответ на тему
1) Первым делом моя ошибка в
таблице TABLE_ECONOMIC
C#
1
2
3
4
5
6
//в стобце COST используеться money он должен передавать свое значение классу Tables\TABLE_ECONOMIC.cs
 
//переменной COST , должно передавать decimal , но не double
[Required]
[Display(Name = "Стоймость")]
public decimal COST { get; set; } //Ошибка public double COST { get; set; }
2) Обезательно нужно проверить сам Web.config
на наличие строки подключения к базе , как стандарт создания проекта
если строка существует то закоментить нужно клавишами (Сtrl+K и Ctrl+C)
Выглядить будет это так
XML
1
2
3
 <connectionStrings>
    <!--<add name="Primaryconect3" providerName="System.Data.SqlClient" connectionString="Data Source=SITY_PC;Initial Catalog=Economics;Integrated Security=SSPI; User ID=PUTIN_IS_KNDR_KOREA; Password=#tyranny" />-->
  </connectionStrings>
Или так
XML
1
2
3
<!--<connectionStrings>
    --><!--<add name="Primaryconect3" providerName="System.Data.SqlClient" connectionString="Data Source=SITY_PC;Initial Catalog=Economics;Integrated Security=SSPI; User ID=PUTIN_IS_KNDR_KOREA; Password=#tyranny" />--><!--
  </connectionStrings>-->
Или вообще к черту удалить строку <connectionStrings> с Web.config если вы не будете использовать ей

Дальше использовать классы ManadgerDB_2, ManadgerDB они рабочие

Все тема закрыта
0
Metall_Version
2126 / 1263 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
07.09.2016, 09:24 3
Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
Ох книжные черви))) молчите
когда сам человек находит решение - оно ценнее намного
1
OwenGlendower
Супер-модератор
Эксперт .NET
11341 / 9555 / 4029
Регистрация: 17.03.2014
Сообщений: 19,112
Записей в блоге: 1
Завершенные тесты: 2
09.09.2016, 00:30 4
Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
2) Заходим в Logins->NT AUTHORITY\система
жмем правой кнопкой мыши по NT AUTHORITY\система , выбираем Properties
там выбираем Server Roles, ставим птичку напротив sysadmin
Не надо так делать. Это даст привилегии системного администратора этой учетной записи. Значит твое веб-приложение будет работать с ними что избыточно и небезопасно. Лучше создать учетную запись в SQL Server и дать ей привилегии только на конкретную базу данных. При подключении в connection string тогда нужно убрать параметр Integrated Security.
1
GENDALF_ISTARI
12 / 29 / 19
Регистрация: 20.08.2013
Сообщений: 717
09.09.2016, 16:00  [ТС] 5
Ну вообще то привелегии должны быть , ведь когда привелегий не было , или они были в master базы как стандарт,
то возникали ошибки NT AUTHORITY\система , быть может это было связано с указанием Integrated Security на отключке , не знаю ?
XML
1
Integrated Security = false;
Добавлено через 11 минут
Я шас еще раз подключаю , и пробую интеграцию Sqlite+EntityFramework6
бывают какие то приколы , хотя всеправильно не до чего придраться , это на VS2010
Я сначала использую обычное подключение
ASP MVC -> Base(базовым набором)
уже есть встроеный Entity Framework 5.0

потом аналог
ASP MVC -> Base(базовым набором)
но с использованием консольной установки
Tools->Library Package Manager->Package Manager Console
вбиваем команду
PM> Install-Package EntityFramework
по идее произойдет подмена на новую версию Entity Framework 6

Добавлено через 38 минут
Уже есть не утешительный результат
1) Первый проект что создан на VS2010
ASP MVC Razov - > Base (с базовыми компонентами EF5 версии)
использованием консольной установки
Tools->Library Package Manager->Package Manager Console
после подмены на новую версию Entity Framework 6
PM> Install-Package EntityFramework

Получаем пустоту , данные не вывелись
хотя все правильно проипсано

Добавлено через 47 минут
Теперь Разберемся

1) VS2010 ASP MVC Razov (Base компоненты) -(использование PM> Install-Package EntityFramework)
подмена EF5 на EF6
для того чтоб использовать новую версию EF6 нужно остановить сервер , или перезагрузить проект
после все начнет работать данные будут выводиться

2) VS2010 ASP MVC Razov (Base компоненты) -(использование Install-Package System.Data.SQLite.EF6)
интегрирваный SQLite+EF6
Если вы хотите использовать EF6 , а не SQLite то вам нужно зайти в Web.config
И отключить провайдера SQLite из за которого происходит конфликт
это строка
XML
1
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />

Полностью где она находиться , я ей закоментил отключил

XML
1
2
3
4
<providers>      
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <!--<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />-->
    </providers>
И тогда ошибки не будет , будет выводить данные

В случаи если вы захотите использовать SQLite , а не EF6 то разкоментите эту строку провайдера
и вперед
0
09.09.2016, 16:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2016, 16:00

не могу достучаться до базу SQL 2000 с web-server
1. выводит надпись Обратитесь к администратору сервера Web. Login failed for user 'NT...

Подключение к SQL-server в ASP.NET веб приложении
Добрый день, вечер, ночь, утро многоуважаемые форумчане. Изучаю asp.net. Есть один вопрос на...

Подключение к базе на SQL Server: Microsoft OLE DB Provider for ODBC Drivers error '80004005'
Мучаюсь с подключением к базе на SQL Server. Все время получаю ошибку: Microsoft OLE DB...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.