Ошибка: формат строки инициализации не соответствует спецификации, начиная с индекса 0

#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. Код пытается использовать имя строки подключения в качестве строки подключения вместо загрузки фактической строки подключения из файла конфигурации.