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);
}
}
答案 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时,需要担心的一些事情。
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
**如果答案是有帮助的,请将答案标记为答案,如果答案没有,请将其取消标记。