Читателю необходимо открытое соединение, потому что вы получаете результаты по одному.Вы захотите сделать ExecuteNonQuery () для вставок, удалений и обновлений.Вы также должны закрыть свое соединение впоследствии.Альтернатива состоит в том, чтобы обернуть вставки в цикл, если вы планируете выполнить несколько вставок.
Существует несколько способов сделать это.Этот способ полезен, если вы планируете многократно использовать один и тот же объект соединения и объект команды:
public partial class Form1 : Form
{
SqlConnection _cn;
SqlCommand _cmd;
const string ConnString = "Enter your connection string here";
readonly string _insertQuery;
const string UsernameParm = "@username";
public Form1()
{
InitializeComponent();
_cn = new SqlConnection(ConnString);
_cmd = new SqlCommand(InsertQuery, _cn);
_cmd.Parameters.Add(UsernameParm, SqlDbType.VarChar);
_insertQuery = String.Format("INSERT INTO checkmultiuser(username) VALUES ({0})",
UsernameParm);
}
private void button1_Click(object sender, EventArgs e)
{
_cmd.Parameters[UsernameParm].Value = textBox1.Text;
try
{
_cn.Open();
_cmd.ExecuteNonQuery();
}
catch (Exception ex) // probably best to catch specific exceptions
{
// handle it
}
finally
{
_cn.Close();
}
}
}
Просто убедитесь, что вы удалили объекты соединения и команды (когда форма закрывается илигде когда-либо имеет смысл для вашего приложения).
Использование блоков - более безопасная альтернатива, но они будут избавляться от объекта каждый раз (хотя соединения используют пул соединений по умолчанию):
public partial class Form1 : Form
{
const string ConnString = "Enter your connection string here";
readonly string _insertQuery;
const string UsernameParm = "@username";
public Form1()
{
InitializeComponent();
_insertQuery = String.Format("INSERT INTO checkmultiuser(username) VALUES ({0})",
UsernameParm);
}
private void button1_Click(object sender, EventArgs e)
{
using (var cn = new SqlConnection(ConnString))
{
using (var cmd = new SqlCommand(InsertQuery, cn))
{
cmd.Parameters.Add(UsernameParm, SqlDbType.VarChar);
cmd.Parameters[UsernameParm].Value = textBox1.Text;
cn.Open();
cmd.ExecuteNonQuery();
}
}
}
}
Любая комбинация тоже подойдет.Вы можете установить соединение один раз и просто обернуть объект команды в блок использования.Я знаю, что некоторые люди не являются поклонниками вложенных блоков (поскольку за кадром это делается (наконец-то), наконец)).