#c# #asp.net #sql-server #string #initialization
#c# #asp.net #sql-сервер #строка #инициализация
Вопрос:
Создание моего первого asp.net проект. Я создал раздел connectionstring в своем файле web.config.
<connectionStrings>
<add name="ProductivityProdConnectionString" connectionString="Data Source=mssql.alliancehs.org;Initial Catalog=Productivity;Integrated Security=True;Connection Timeout=1000" providerName="System.Data.SqlClient" />
<add name="ProductivityTestConnectionString" connectionString="Data Source=mssql.alliancehs.org;Initial Catalog=Productivity;Integrated Security=True;Connection Timeout=1000" providerName="System.Data.SqlClient" />
</connectionStrings>
Затем я создал файл с именем SQLControl.cs для управления доступом к моим данным.
Я получаю сообщение об ошибке «Формат строки инициализации не соответствует спецификации, начинающейся с индекса 0».
в следующей строке:
dbconn = new SqlConnection(connectionstring);
Почему ошибка?
Полный код SQLControl.cs приведен ниже:
using System;
using System.Collections.Generic;
using System.Data;
using global::System.Data.SqlClient;
using global::Microsoft.VisualBasic;
using System.Web;
using System.Web.UI;
using System.Linq;
using System.Web.UI.WebControls;
using global::System.IO;
namespace Productivity_ASPWeb
{
public class SQLControl
{
private SqlConnection dbconn = new SqlConnection();
private SqlCommand DBCmd;
public SqlDataAdapter DBDA;
public DataTable DBDT;
public DataSet DBDS;
public List<SqlParameter> @params = new List<SqlParameter>();
public int recordcount;
public string exception;
public SQLControl()
{
if (GlobalVariables.logProd == 1)
{
GlobalVariables.strConnection = "ProductivityProdConnectionString";
}
else
{
GlobalVariables.strConnection = "ProductivityTestConnectionString";
}
}
public SQLControl(string connectionstring)
{
if (GlobalVariables.logProd == 1)
{
GlobalVariables.strConnection = "ProductivityProdConnectionString";
}
else
{
GlobalVariables.strConnection = "ProductivityTestConnectionString";
}
connectionstring = GlobalVariables.strConnection;
dbconn = new SqlConnection(connectionstring);
}
public void ExecuteQuery(string Query)
{
if (GlobalVariables.logProd == 1)
{
GlobalVariables.strConnection = "ProductivityProdConnectionString";
}
else
{
GlobalVariables.strConnection = "ProductivityTestConnectionString";
}
dbconn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings[GlobalVariables.strConnection].ConnectionString;
recordcount = 0;
exception = "";
try
{
dbconn.Open();
DBCmd = new SqlCommand(Query, dbconn);
@params.ForEach(p => DBCmd.Parameters.Add(p));
@params.Clear();
DBDT = new DataTable();
DBDS = new DataSet();
DBDA = new SqlDataAdapter(DBCmd);
recordcount = DBDA.Fill(DBDS);
}
catch (Exception ex)
{
exception = "ExecQuery Error: " ex.Message;
}
finally
{
if (dbconn.State == ConnectionState.Open)
{
dbconn.Close();
}
}
}
public void AddParam(string name, object value)
{
var NewParam = new SqlParameter(name, value);
@params.Add(NewParam);
}
public bool HasException(bool Report = false)
{
if (string.IsNullOrEmpty(exception))
return false;
else
return true;
}
}
}
Комментарии:
1. Какую БД вы используете?
2. Вам не нужно указывать имя поставщика в строке подключения. Вы используете SqlClient в c #, который использует своего собственного провайдера. Ваша строка подключения должна быть только атрибутом из строки подключения, а не всей строкой подключения. Что — то вроде этого: «Данные Source=mssql.alliancehs.org ; Начальный каталог = Производительность; Встроенная безопасность= True; Время ожидания соединения = 1000»
3. Использование SQL Server. Я удалил часть ProviderName, но все равно получил ошибку.
4. Я изменил это: connectionstring = GlobalVariables.strConnection; dbconn = new SqlConnection(connectionstring); на: connectionstring = «Данные Source=mssql.alliancehs.org ; Начальный каталог = производительность; Встроенная безопасность = True; Время ожидания соединения = 1000;»; dbconn = новое SqlConnection(connectionstring); И я больше не получаю ошибку. Я думаю, что это чтение и установка GlobalVariables.strConnection на имя вместо значения connectionstring. Я хочу иметь возможность установить, подключаюсь ли я к Prod или Test. Поэтому я все равно хотел бы исправить эту проблему.
5. Код пытается использовать имя строки подключения в качестве строки подключения вместо загрузки фактической строки подключения из файла конфигурации.