c#中SQL Server数据库连接字符串的语法

时间:2017-06-11 23:29:58

标签: c# sql sql-server database

我是SQL的初学者,感谢您的关注。我已经在Visual Studio 2015中创建了一个数据库(使用“Project”菜单中的“Add new Item”并添加“Service Based Database”),现在我想连接它并在其上读取或写入数据。

但我不知道如何通过代码连接到它。

当我点击服务器资源管理器中的数据库时,我使用连接字符串中显示的字符串。

就在这里:

Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="c:\users\soroush\documents\visual studio 2015\Projects\databasetest2\databasetest2\Database1.mdf";Integrated Security=True    

但是如您所知,当我将其复制并粘贴到可以在new sqlConnection(connection string)中使用的字符串时,它无法使用,因为此字符串具有'\'或'“'

连接到本地数据库的正确字符串是什么?

现在这是我的代码,但没用:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = c:\users\soroush\documents\visual studio 2015\Projects\databasetest2\databasetest2\Database1.mdf; Integrated Security = True");
    con.Open();

    string t=@"INSERT INTO Table (Id,name) Values (34, 'John')";

    SqlCommand cmd = new SqlCommand(t, con);
    cmd.ExecuteNonQuery();

    con.Close();
}

private void button2_Click(object sender, EventArgs e)
{
    using (SqlConnection con = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = c:\users\soroush\documents\visual studio 2015\Projects\databasetest2\databasetest2\Database1.mdf; Integrated Security = True"))
    {
        con.Open();
        string t = "SELECT * From Table";

        SqlCommand cmd = new SqlCommand(t, con);

        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            MessageBox.Show(reader["Id"].ToString() + reader["name"].ToString());
        }

        con.Close();
    }
}

感谢您的帮助

更新:我在撰写和阅读表时遇到了其他错误

我认为在使用您的帮助后我已连接到我的数据库。现在我在阅读表格时遇到了另一个错误。此错误指向

SqlDataReader reader = cmd.ExecuteReader();

在我的代码中说:

  

System.Data.dll中发生未处理的“System.Data.SqlClient.SqlException”类型的异常附加信息:关键字“Table”附近的语法不正确。

并且写入表中的错误指向

cmd.ExecuteNonQuery();

在我的代码中:

  

System.Data.dll中发生未处理的“System.Data.SqlClient.SqlException”类型的异常附加信息:关键字“Table”附近的语法不正确。

我的数据库有一个名为Table的表,其中包含两列:Id(int)name(nchar10)

3 个答案:

答案 0 :(得分:2)

你用来连接你的Sql db的代码是......好吧......真是老派。我们不再这样做了。

那么 - 我们可以做些什么呢?让我们使用nice library called Dapper来进行“说话”。到一个sql server 非常简单,更简单,更安全

首先,从nuget安装Dapper包: enter image description here

创建一个POCO,它将代表从DB返回的数据。

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

现在更新表单代码如下:

private const string _connectionString = @"Data Source = (LocalDB) <snipped..>";



private void button1_Click(object sender, EventArgs e)
{
    string query = "INSERT INTO Table (Id,name) Values (34, 'John')";
    int rowsInserted;
    using (var db = new SqlConnection(_connectionString))
    {
        rowsInserted = db.Execute(query);
    }

    if (rowsInserted != 1)
    {
        // Log/Handle the fact that you failed to insert 1 record;
    }
}

private void button2_Click(object sender, EventArgs e)
{
    IList<Foo> foos;

    using (var db = new SqlConnection(_connectionString))
    {
        const string query = "SELECT * FROM Table";
         // This will always return a list. It's empty or has items in it.
        foos = db.Query<Foo>(query).ToList();
    }

    foreach(var foo in foos)
    {
        MessageBox.Show($"{foo.Id} - {foo.Name}");
    }
}

那更干净吗?是的 - 我是这么认为的。

当然,我绝不会把数据库代码放在winform事件之后,而是放入专门的课程等等。但我想你只是在学习/玩耍/试验:) :)

另外,我还没有把错误处理放在那里,以保持示例的小。

答案 1 :(得分:1)

变化:

string t = "SELECT * From Table";

为:

string t = "SELECT * From [Table]";

string t=@"INSERT INTO Table (Id,name) Values (34, 'John')";

为:

string t=@"INSERT INTO [Table] (Id,name) Values (34, 'John')";

请参阅https://stackoverflow.com/a/695590/34092https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql

答案 2 :(得分:0)

我的问题已经解决了 首先连接到数据库我输入@ before连接字符串并删除字符串中的引号@juergen d在评论中说

第二个用于解决写入和读取表格中的错误我在&#34;表格&#34;之前和之后键入[和]正如@mjwills所说

@ Pure.Krome还解释了一种更专业的方法来改进代码

谢谢你们每个人