как изменить строку подключения на основе выбора запроса - PullRequest
1 голос
/ 16 марта 2019

У меня есть веб-проект, который должен изменить строку подключения на основе выполнения запроса. Вот мой код, в котором я определяю строку подключения:

protected void GetConnection(string cnn_db = "NEWBULKSMS")
{
    try
    {
        string Cnn_Str = "";

        //string ServerName = "SERVER2008\\SQL_EXP_2008";
        //string DBUserName = "sa";
        //string DBPassword = "sa_123";

        string ServerName = "SHREE-PC";
        string DBUserName = string.Empty;
        string DBPassword = string.Empty;
        DBPassword += "c#" + Convert.ToChar(49);

        string Database = cnn_db;

        Cnn_Str = "Data Source=" + ServerName + "; UID=" + DBUserName + "; PWD=" + DBPassword + "; Database=" + Database+";Integrated Security = True";
        //Cnn_Str = "Data Source=SHREE-PC;Initial Catalog=Project_DB_MNG;Integrated Security=True";
        mstr_ConnectionString = Cnn_Str;

        mobj_SqlConnection = new SqlConnection(mstr_ConnectionString);

        mobj_SqlCommand = new SqlCommand();
        mobj_SqlCommand.CommandTimeout = mint_CommandTimeout;
        mobj_SqlCommand.CommandType = CommandType.StoredProcedure;
        mobj_SqlCommand.Connection = mobj_SqlConnection;
        mobj_SqlConnection.Open();
    }
    catch (Exception ex)
    {
        throw new Exception("Error initializing data class." + Environment.NewLine + ex.Message);
    }
}

А вот запрос, который меняет мою базу данных с именем таблицы, который должен изменить соединение:

str = "SELECT ROW_NUMBER() OVER (ORDER BY RowId DESC) AS RowNumber, p.CampaignName,";
str += "p.MobileNo,";
str += "p.Message,";
str += "p.CharCount,";
str += "p.strSenderID AS Sender,";
str += "u.strUserName AS UserId,";
str += "ds.strDR AS DeliveryStatus,";
str += "ds.strDiscription AS Original_DRStatus,";
str += "m.strMessageType AS MessageType,";
str += "CONVERT(VARCHAR(20), p.ReceiveTime) AS ReceiveTime,";
str += "CONVERT(VARCHAR(20), p.SendTime) AS SendTime,";
str += "CONVERT(VARCHAR(20), p.DoneTime) AS DoneTime,";
str += "p.RootId AS Root,";
str += "sp.ProviderName,";
str += "(CASE intAccountType WHEN 1  THEN 'Promotional' WHEN 2 THEN 'Transactional' WHEN 3 THEN 'OptIn' END)  as AccountType";
str += " INTO ##Results3 ";
//str += " FROM NEWSMSLOG_2019_01..LOG_010119  p ";   //here I want to change connection string with another database
str += " FROM NEWBULKSMS.dbo.LOG_010119  p ";
str += " INNER JOIN deliverstatus ds ON p.DeliveryStatus = ds.intDR_status inner join users u on u.id = p.userid";
str += " LEFT JOIN senderids b ON b.id = p.senderid";
str += " LEFT JOIN messagetype m ON m.intcode = p.messagetype";
str += " LEFT JOIN smppproviders sp ON sp.RootId = p.RootId";
str += " WHERE 1 = 1 ";

Как мне сделать это программным путем на основе выбора запроса?

Пожалуйста, помогите мне, ребята

1 Ответ

1 голос
/ 16 марта 2019

Я бы настоятельно рекомендовал использовать ранее существующий класс SqlConnectionStringBuilder из .NET Framework. Это позволяет вам указывать различные свойства вашей строки подключения и гарантирует, что вы получите правильную строку подключения.

Примерно так:

string ServerName = "SHREE-PC";
string Database = cnn_db;

SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();

// set the properties
scsb.DataSource = ServerName;
scsb.InitialCatalog = Database;

// optionally set a user name / password
scsb.UserId = "YourUserName";
scsb.Password = "top$ecret";

// or if you leave out the username/password - set the "Integrated Security" flag instead
scsb.IntegratedSecurity = true;

// possibly set other options here....

// finally - get your connection string
string connectionString = scsb.ConnectionString;

При таком подходе вы можете настроить строку подключения любым удобным вам способом - просто установив некоторые свойства в соответствии с вашими критериями.

...