C# 连接到本地数据库

C# 连接到本地数据库,c#,C#,我试图通过mdf文件创建本地数据库,如下所示: scon = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\articles.mdf; Integrated Security=True"); scon.Open(); scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)"); scmd.Parame

我试图通过mdf文件创建本地数据库,如下所示:

scon = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\articles.mdf; Integrated Security=True");
scon.Open();
scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)");
scmd.Parameters.AddWithValue("@url", "http://google.com");
scmd.ExecuteNonQuery();
我的mdf文件在根文件夹中,也在调试文件夹中。当我运行以下代码时,会出现如下错误:

我无法使用完整连接路径,因为它是一个带有空格的长url,以下是我的文件结构:

我的数据库存在:


如何修复此问题以便连接到数据库?

将连接对象传递给SqlCommand构造函数

scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)", scon);
connectionstring正常,错误消息通知您,如果数据库未知,则无法执行命令。SqlConnection包含此信息,您需要将其传递给您的命令。 另一种可能性是通过

scmd.Connection = scon;
但是,就个人而言,我更喜欢在构造函数中传递这些信息

最后但非常重要的注意事项
SqlConnection和SqlCommand是一次性对象。您应该始终处理此类对象。using语句是正确的方法

using(scon = new SqlConnection(....))
using(scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)",scon))
{
   scon.Open();
   scmd.Parameters.AddWithValue("@url", "http://google.com");
   scmd.ExecuteNonQuery();
}

将连接对象传递给SqlCommand构造函数

scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)", scon);
connectionstring正常,错误消息通知您,如果数据库未知,则无法执行命令。SqlConnection包含此信息,您需要将其传递给您的命令。 另一种可能性是通过

scmd.Connection = scon;
但是,就个人而言,我更喜欢在构造函数中传递这些信息

最后但非常重要的注意事项
SqlConnection和SqlCommand是一次性对象。您应该始终处理此类对象。using语句是正确的方法

using(scon = new SqlConnection(....))
using(scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)",scon))
{
   scon.Open();
   scmd.Parameters.AddWithValue("@url", "http://google.com");
   scmd.ExecuteNonQuery();
}

您的代码的问题是您有一个命令和一个连接,但是在命令使用这个连接对象之前没有任何东西可以使用。。。您可以使用SqlCommand构造函数来实现这一点

scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)",scon)
或者像这样使用SqlCommand类的Connection属性

scmd.Connection = scon  
考虑使用将
添加到SQL连接中。。。否则,您必须通过调用
scon.Close()手动关闭连接

如果您没有执行上述任一操作,则如果您在连接已打开时再次尝试打开连接,您将遇到异常。代码的问题是您有一个命令和一个连接,但在使用此连接对象的命令之前,没有任何操作。。。您可以使用SqlCommand构造函数来实现这一点

scmd = new SqlCommand("Insert INTO articles(url) VALUES(@url)",scon)
或者像这样使用SqlCommand类的Connection属性

scmd.Connection = scon  
考虑使用
添加到SQL连接中。。。否则,您必须通过调用
scon.Close()手动关闭连接

如果未执行上述任一操作,则在连接已打开时再次尝试打开连接时将遇到异常

是否尝试通过删除空格和其他非字母数字字符重命名文件夹?是否尝试通过删除空格和其他非字母数字字符重命名文件夹字符?
SqlCommand
实际上不需要处理。它可配置的唯一原因是它继承自
System.ComponentModel.Component
。无论是
SqlCommand
还是
DbCommand
都不会在处理过程中执行任何操作。处理命令时发生的唯一事情是。是的,这是真的。但是如果一个对象实现了IDisposable接口,那么如果我尊重建议的模式,我会做错什么呢?我更愿意忽略这些,因为您要处理您创建的每个
DataTable
,并处理从异步方法返回的每个
Task
Task
?我处理不再需要的对象
SqlCommand
。它可配置的唯一原因是它继承自
System.ComponentModel.Component
。无论是
SqlCommand
还是
DbCommand
都不会在处理过程中执行任何操作。处理命令时发生的唯一事情是。是的,这是真的。但是如果一个对象实现了IDisposable接口,那么如果我尊重建议的模式,我会做错什么呢?我更愿意忽略这些,因为您要处理您创建的每个
DataTable
,并处理从异步方法返回的每个
Task
Task
?我要处理不再需要的对象