단일 SQL 연결에서 여러 SQL 명령을 실행하는 방법은 무엇입니까?
단일 SQL 연결에서 2-3개의 SQL 명령을 실행해야 하는 프로젝트를 만들고 있습니다.제가 작성한 코드는 다음과 같습니다.
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\project.mdf;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("select * from " + mytags.Text + " ", con);
SqlDataReader rd = cmd.ExecuteReader();
if (rd.Read())
{
con.Close();
con.Open();
SqlCommand cmd1 = new SqlCommand("insert into " + mytags.Text + " values ('fname.lname@gmail.com','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','"+mytags.Text+"')", con);
cmd1.ExecuteNonQuery();
label.Visible = true;
label.Text = "Date read and inserted";
}
else
{
con.Close();
con.Open();
SqlCommand cmd2 = new SqlCommand("create table " + mytags.Text + " ( session VARCHAR(MAX) , Price int , Description VARCHAR(MAX), Date VARCHAR(20),tag VARCHAR(10))", con);
cmd2.ExecuteNonQuery();
con.Close();
con.Open();
SqlCommand cmd3 = new SqlCommand("insert into " + mytags.Text + " values ('" + Session + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + mytags.Text + "')", con);
cmd3.ExecuteNonQuery();
label.Visible = true;
label.Text = "tabel created";
con.Close();
}
오류를 제거하려고 시도했지만 연결 상태가 다른 상태로 진행되지 않는다는 것을 알게 되었습니다.코드를 검토한 후 이에 대한 오류나 다른 해결책이 있는지 제안해주시기 바랍니다.
변경만 하면 됩니다.SqlCommand.CommandText
새로 생성하는 대신SqlCommand
매회연결을 닫았다가 다시 열 필요가 없습니다.
// Create the first command and execute
var command = new SqlCommand("<SQL Command>", myConnection);
var reader = command.ExecuteReader();
// Change the SQL Command and execute
command.CommandText = "<New SQL Command>";
command.ExecuteNonQuery();
다음과 같이 하면 됩니다.단일 연결을 항상 열어두고 새 명령을 만들어 실행합니다.
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command1 = new SqlCommand(commandText1, connection))
{
}
using (SqlCommand command2 = new SqlCommand(commandText2, connection))
{
}
// etc
}
연결 문자열에서 이 속성을 활성화하기만 하면 됩니다.
sqb.MultipleActiveResultSets = true;
이 속성은 여러 데이터 리더에 대해 하나의 열린 연결을 허용합니다.
저는 테스트하지 않았지만, 주요 아이디어는 각 쿼리에 세미콜론을 넣는 것입니다.
SqlConnection connection = new SqlConnection();
SqlCommand command = new SqlCommand();
connection.ConnectionString = connectionString; // put your connection string
command.CommandText = @"
update table
set somecol = somevalue;
insert into someTable values(1,'test');";
command.CommandType = CommandType.Text;
command.Connection = connection;
try
{
connection.Open();
}
finally
{
command.Dispose();
connection.Dispose();
}
업데이트: ADO.NET 명령에 여러 개의 SQL 명령을 사용할 수 있습니까?를 따를 수 있습니다.CommandText 속성?너무
그런데 이것은 SQL 주입을 통해 공격될 가능성이 높습니다.그것에 대해 읽고 그에 따라 질문을 조정하는 것은 가치가 있을 것입니다.
이를 위해 저장된 proc를 만들고 동적 sql이 필요할 때 이를 방지할 수 있는 sp_executesql과 같은 것을 사용하는 것도 고려해 볼 수 있습니다.알 수 없는 테이블 이름 등).자세한 내용은 이 링크를 참조하십시오.
아무도 이것을 언급하지 않았지만, 같은 명령에서 ; 세미콜론을 사용하여 명령을 분리할 수도 있습니다.텍스트:
using (SqlConnection conn = new SqlConnection(connString))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
comm.CommandText = @"update table ... where myparam=@myparam1 ; " +
"update table ... where myparam=@myparam2 ";
comm.Parameters.AddWithValue("@myparam1", myparam1);
comm.Parameters.AddWithValue("@myparam2", myparam2);
conn.Open();
comm.ExecuteNonQuery();
}
}
관심 있는 사용자가 있는 경우 쿼리가 아닌 다중 예제입니다.
using (OdbcConnection DbConnection = new OdbcConnection("ConnectionString"))
{
DbConnection.Open();
using (OdbcCommand DbCommand = DbConnection.CreateCommand())
{
DbCommand.CommandText = "INSERT...";
DbCommand.Parameters.Add("@Name", OdbcType.Text, 20).Value = "name";
DbCommand.ExecuteNonQuery();
DbCommand.Parameters.Clear();
DbCommand.Parameters.Add("@Name", OdbcType.Text, 20).Value = "name2";
DbCommand.ExecuteNonQuery();
}
}
여기에서 Postgre 예제를 찾을 수 있습니다. 이 코드는 단일 SQL 연결 내에서 여러 SQL 명령(업데이트 2열)을 실행합니다.
public static class SQLTest
{
public static void NpgsqlCommand()
{
using (NpgsqlConnection connection = new NpgsqlConnection("Server = ; Port = ; User Id = ; " + "Password = ; Database = ;"))
{
NpgsqlCommand command1 = new NpgsqlCommand("update xy set xw = 'a' WHERE aa='bb'", connection);
NpgsqlCommand command2 = new NpgsqlCommand("update xy set xw = 'b' where bb = 'cc'", connection);
command1.Connection.Open();
command1.ExecuteNonQuery();
command2.ExecuteNonQuery();
command2.Connection.Close();
}
}
}
using (var connection = new SqlConnection("Enter Your Connection String"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "Enter the First Command Here";
command.ExecuteNonQuery();
command.CommandText = "Enter Second Comand Here";
command.ExecuteNonQuery();
//Similarly You can Add Multiple
}
}
그것은 나에게 효과가 있었다.
언급URL : https://stackoverflow.com/questions/13677318/how-to-run-multiple-sql-commands-in-a-single-sql-connection
'programing' 카테고리의 다른 글
오래된 Git commit을 어떻게 수정합니까? (0) | 2023.07.10 |
---|---|
파이썬의 클래스 상수 (0) | 2023.07.10 |
ggplot2 플롯 영역 여백? (0) | 2023.07.10 |
SQL 서버에 IP 주소를 저장하는 데 가장 적합한 데이터 유형은 무엇입니까? (0) | 2023.07.10 |
SQL Server 저장 프로시저/함수에서 입력-출력 매개 변수를 선언하는 방법 (0) | 2023.07.10 |