Подключение VS Project к SQL Server

TL;DR, чтобы вы перестали ставить это на удержание: Visual Studio не позволит мне создать прямое соединение с базой данных на сервере SQL в проекте, даже если оно может обмениваться данными с сервером вне проектов. Я хочу, чтобы он имел прямое соединение, чтобы я мог создать веб-сайт, который использует и разрешает доступ к базе данных.

У меня Visual Studio 2017 Professional и Microsoft SQL Server Management Studio 2017.

Я успешно подключил базу данных с сервера к Visual Studio, так что я могу редактировать базу данных в Visual Studio, и сервер будет отражать мои изменения. Однако я не могу получить живое соединение с сервером внутри какого-либо проекта. Когда я импортирую базу данных в проект, она просто создает копию, которая фактически не связывается с сервером.

Я думаю, мне нужно создать какой-то особый объект или изменить некоторые настройки в Visual Studio.

Нужно ли переходить на Enterprise для поддерживаемых функций? Кажется рациональным, что для этого должно быть достаточно профессионального издания, но если кто-то знает, как решить проблему такого рода с помощью другой версии Visual Studio или как создать веб-сайт, подключенный к серверу базы данных с помощью другой (возможно, доступной) программы, Я весь во внимании. Спасибо!

(Этот параграф добавлен позже для ясности:) Моя цель - создать сайт с использованием Visual Studio, который позволит авторизованным пользователям редактировать базу данных. Если это не страшная идея, я хочу начать с того, чтобы сделать возможным редактирование базы данных на сервере с помощью веб-сайта, созданного в Visual Studio, а затем добавить функции безопасности. Текущая база данных на сервере является ненужной, пока система не будет удовлетворительно настроена. Похоже, что возможно получить доступ к базе данных с помощью веб-сайта, не помещая его непосредственно в проект Visual Studio, поэтому я изучаю указания, приведенные во втором комментарии.

Наименее заполненное ошибками решение, которое мне удалось найти, основано на комментарии и ссылке @Symon. Я перепробовал несколько вещей для первой строки, и общедоступность void, кажется, приводит к 1/30 ошибкам, как к чему-то еще, что я пробовал, что определенно не означает, что это действительно правильный ответ. Элементы в квадратных скобках удаляются из соображений безопасности. Я ввел учетные данные для базы данных точно так же, как и во всплывающем окне, чтобы подключить Visual Studio в целом к ​​базе данных на сервере.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

public void heresanamespacethingy (string stp)

{
    //GET STORED PROCEDURE HERE
    string conStr = @"Data Source=[server name]; Initial Catalog=[database name]; User ID=[my user ID]; Password=[my password]";

    using (SqlConnection conn = new SqlConnection(conStr))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = stp;

        conn.Open();

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.ExecuteNonQuery();

        conn.Close();
        conn.Dispose();
   }
}

Ошибка CS0116. Пространство имен не может напрямую содержать элементы, такие как поля или методы.

1 ответ

Решение

Я использую VS Community и могу нормально взаимодействовать с моим MS SQL Server. Выпуск Visual Studio, который вы используете, не будет ограничивать возможности кода. Издания просто добавляют дополнительные функции. Я никогда не слышал, чтобы кто-то был ограничен в своих проектах из-за выпуска Visual Studio, который они используют.

Как сказал @Kfirprods, вам может быть очень полезно управлять своим сервером / базами данных с помощью Microsoft SQL Server Management Studio 2017 вместо того, чтобы пытаться использовать Visual Studios для всего.

Самый распространенный способ получения информации и данных о вашей текущей / текущей базе данных состоит в том, чтобы ваш код C# обращался к реальным данным и извлекал их. У меня будет пример вызова C# хранимой процедуры ниже. В этом примере вызывается только хранимая процедура, показывающая, как можно использовать C# для подключения к SQL Server и изменения данных. Вы также можете отправлять отдельные, встроенные запросы с помощью этого метода. Однако, чтобы избежать внедрения SQL-кода (тем более, что это веб-сайт), лучше использовать этот метод для вызова хранимых процедур и представлений, а не для отправки встроенных запросов.

Это может быть хорошей ссылкой для изучения того, как начать использовать C# для подключения к SQL Server. Это то, что я использовал, чтобы начать!

Моя студия управления SQL Server подключена к моему серверу / базам данных, и моя Visual Studio заботится только о моем коде C#. Это помогает держать вещи разделенными и организованными (для меня, во всяком случае).


Вот пример метода C#, который подключается к базе данных SQL и запускает хранимую процедуру:

 public void CallSproc(string stp)
 {
        //GET STORED PROCEDURE HERE
        string conStr = "Data Source=" + ConfigurationManager.AppSettings["DataSource"] + "Initial Catalog=" + ConfigurationManager.AppSettings["InitialCatalog"] + "Integrated Security=True;";

        using (SqlConnection conn = new SqlConnection(conStr))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = stp;

            conn.Open();

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.ExecuteNonQuery();

            conn.Close();
            conn.Dispose();
        }
 }

Код объяснил:

ConfigurationManager.AppSettings[] указывает на мой App.config файл и ключи (идентификаторы), где хранятся эти данные. В случае потери текущего сервера программа не требует повторной компиляции. Файл конфигурации просто нужно изменить, чтобы он указывал на правильное местоположение.

Переменная stp является строкой, которая передается из другого метода, который содержит имя хранимой процедуры (например, "stpAddNumbers").

conStr это строка подключения, которая говорит SqlConnection() позвоните, к какому серверу и базе данных подключиться.

conn.Open(); открывает соединение с самим SQL Server.

cmd.CommandType = CommandType.StoredProcedure; сообщает код, который вы вызываете для хранимой процедуры.

cmd.ExecuteNonQuery(); выполняет хранимую процедуру и результаты возвращаются.


CS0116 Пространство имен не может напрямую содержать элементы, такие как поля или методы:

С кодом, который вы показали вместе с сообщением об ошибке, у вас нет namespace совсем. Чтобы это исправить, просто оберните method в namespace, Вот так:

...
using System.Threading.Tasks;

namespace HeresANameSpace
{
    class ThisIsAClass
    {
        public void HeresAMethod (string stp)

        {
            //GET STORED PROCEDURE HERE
            string conStr = @"Data Source=[server name]; Initial Catalog=[database name]; User ID=[my user ID]; Password=[my password]";

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = stp;

                conn.Open();

                cmd.CommandType = CommandType.StoredProcedure;

                cmd.ExecuteNonQuery();

                conn.Close();
                conn.Dispose();
           }

            //End of HeresAMethod()
        }

        //End of HeresAClass
    }

    //End of HeresANamespace
}

При запуске из пустого файла кода, вы должны написать в namespace, class с и method с. method идет внутри class, class идет внутри namespace,

Другие вопросы по тегам