无法使用C#连接到SQL Server

时间:2017-03-24 20:33:28

标签: c# sql-server

private void button1_Click(object sender, EventArgs e)
{ 
    string connetionString = null;    

    SqlConnection cnn;
    connetionString = "My_Connection";

    cnn = new SqlConnection(connetionString);

    try
    {
        cnn.Open();

        SqlCommand cmd = new SqlCommand("INSERT INTO person " +
              "(name, lastname, phone) VALUES('@name', '@lastname', '@phone')");
        cmd.CommandType = CommandType.Text;
        cmd.Connection = cnn;

        cmd.Parameters.AddWithValue("@name", txtName.Text);
        cmd.Parameters.AddWithValue("@lastname", txtLastname.Text);
        cmd.Parameters.AddWithValue("@phone", Convert.ToInt32(txtPhone.Text));

        MessageBox.Show("Successful");

        cnn.Close();
    }
    catch (SqlException ex)
    {
        MessageBox.Show("You failed!" + ex.Message);
    }
}

4 个答案:

答案 0 :(得分:5)

此代码存在许多问题。您似乎正在尝试从配置文件中引用连接字符串。但是,您不能只将名称传递给连接 - 您必须实际检索它并将其分配给private void button1_Click(object sender, EventArgs e) { // retrieve connection from configuration file // requires a reference to System.Configuration assembly in your project string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["My_Connection"].ConnectionString; //alternatively, hardcode connection string (bad idea!) //string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; using(SqlConnection connection = new SqlConnection(connectionString)) using(SqlCommand command = new SqlCommand("INSERT INTO person (name, lastname, phone) VALUES(@name, @lastname, @phone)", connection)) { // you should avoid AddWithValue here, see http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ // thanks marc_s! http://stackoverflow.com/users/13302/marc-s command.Parameters.AddWithValue("@name", txtName.Text); command.Parameters.AddWithValue("@lastname", txtLastname.Text); command.Parameters.AddWithValue("@phone", Convert.ToInt32(txtPhone.Text)); connection.Open(); command.ExecuteNonQuery(); } MessageBox.Show("Successful"); } 。或者,您可以对连接字符串进行硬编码,connectionstrings.com可以获得大量示例。

将连接字符串直接放在应用程序中通常不是一个好主意,因为您需要在整个应用程序中重复使用它们,最好将它们声明放在中心位置。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="My_Connection" providerName="System.Data.SqlClient" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" />
  </connectionStrings>
</configuration>

连接字符串在其构造函数中传递给连接,连接通过其构造函数传递给命令。

请注意,不需要显式关闭连接,using语句会为您处理这些连接。当变量超出范围时,即使存在异常,也会关闭连接。

配置文件中的连接字符串示例:

{{1}}

答案 1 :(得分:1)

您必须编写有效的connetionString。如果你问什么是连接字符串?

这是答案

&#39;在计算中,连接字符串是一个字符串,它指定有关数据源的信息以及连接它的方法。它在代码中传递给底层驱动程序或提供程序以启动连接。虽然通常用于数据库连接,但数据源也可以是电子表格或文本文件。

连接字符串可能包含驱动程序名称,服务器和数据库等属性,以及用户名和密码等安全信息。&#39;

像这样的东西

Server=myServerAddress;Database=myDataBase;User Id=myUsername; Password=myPassword; 

在另一台计算机上连接到SQL Server时,需要担心的一些事情。

  • 本机的主机/ IP地址
  • 初始目录(数据库名称)
  • 有效的用户名/密码

SQL服务器通常可以作为默认的intance运行,这意味着你可以简单地指定主机名/ IP地址,但是你可能会遇到一个它作为命名实例运行的场景(例如Sql Express)。在这种情况下,您必须指定主机名\实例名称

答案 2 :(得分:0)

您的连接字符串丢失了!定义它或从您的配置中获取。 “My_Connection”不包含服务器,数据库,用户,密码。使用类似的东西:

def self.devices_by_city_another
  tmp_result = Device.joins(station: :address).group(:city).count
  result = Hash[tmp_result.sort_by { |_k, v| -v }[0..4]]
end

答案 3 :(得分:0)

using (SqlConnection connection = new SqlConnection("Data Source=ServerName; Initial Catalog=DatabaseName;User ID=UserName;Password=Password"))
{
using (SqlCommand command = new SqlCommand())
{
    command.Connection = connection;            // <== lacking
    command.CommandType = CommandType.Text;
    command.CommandText = "INSERT INTO person " +
                  "(name,lastname,phone) VALUES('@name', '@lastname', '@phone')";
    cmd.Parameters.AddWithValue("@name", txtName.Text);
    cmd.Parameters.AddWithValue("@lastname", txtLastname.Text);
    cmd.Parameters.AddWithValue("@phone", Convert.ToInt32(txtPhone.Text));

    try
    {
        connection.Open();
        int recordsAffected = command.ExecuteNonQuery();
    }
    catch(SqlException)
    {
        // error here
    }
    finally
    {
        connection.Close();
    }
}
}

这是工作代码。

此致

Thiyagu Rajendran

**如果答案是有帮助的,请将答案标记为答案,如果答案没有,请将其取消标记。