将 VS 项目连接到 SQL 服务器

Connecting VS Project to 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 的评论和 link。我已经为第一行尝试了几件事,并且 public void 似乎是我尝试过的任何其他错误的大约 1/30,这绝对并不意味着它实际上是正确的答案。出于安全原因,删除了方括号中的项目。我完全按照在弹出 window 中所做的那样输入数据库的凭据,以将 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 命名空间不能直接包含字段或方法等成员。

我正在使用 VS Community 并且可以与我的 MS SQL 服务器进行交互。您使用的 Visual Studio 版本不会限制您可以在代码方面执行的操作。这些版本只是增加了额外的功能。 我从未听说有人因为使用的 Visual Studio 版本而在项目中受到限制。

如@Kfirprods 所述,使用 Microsoft SQL Server Management Studio 2017 管理 Server/Databases 可能对您非常有帮助,而不是尝试对所有内容使用 Visual Studios。

我见过的获取 live/current 数据库信息和数据的最常见方法是让 C# 代码调用实时数据并提取它。我将在下面有一个 C# 调用存储过程的示例。 该示例仅调用了一个存储过程,展示了如何使用 C# 连接到 SQL 服务器并更改数据。您还可以通过此方法发送单独的内联查询。但是,为了避免 SQL 注入(尤其是因为它是一个网站),使用此方法调用存储过程和视图而不是发送内联查询会更好。

This 可能是一个很好的 link 阅读以了解如何开始使用 C# 连接到 SQL 服务器。这就是我用来开始的!

我的 SQL 服务器管理工​​作室连接到我的 Server/Databases,我的 Visual Studio 只关心我的 C# 代码。它有助于保持事物的分离和组织(无论如何对我来说)。


这是连接到 SQL 数据库并运行存储过程的 C# 方法示例:

 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 服务器本身的连接。

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
}

从空白代码文件开始时,您需要在 namespaceclasss 和 methods 中写入。 method 进入 class 内部,class 进入 namespace 内部。