![](/img/trans.png)
[英]Error when trying to insert data to a SQL Server database through a C# application
[英]Open connection trouble when trying to insert data into SQL Server database
我已經創建了一個帶有密碼請求的Main
表單,以根據用戶名登錄到下一個表單。 現在在這里,我制作了帶有標簽的另一種形式。 一個選項卡用於插入數據,另一個選項卡用於檢查數據。
我已經創建了像這樣的圖片形式
這是我的代碼:
`
namespace Kartice
{
public partial class Matjaz : Form
{
// string KarticaMString = "Data Source=hostname;Initial Catalog=mydatabase;uid=uid;pwd=pwd;Integrated Security=True;";
// SqlConnection KarticaM = new SqlConnection();
public Matjaz()
{
InitializeComponent();
}
private void karticaMBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
}
private void usersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
}
private void usersBindingNavigatorSaveItem_Click_1(object sender, EventArgs e)
{
}
private void karticaMBindingNavigatorSaveItem_Click_1(object sender, EventArgs e)
{
}
private void Matjaz_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'kartice1.KarticaM' table. You can move, or remove it, as needed.
this.karticaMTableAdapter.Fill(this.kartice1.KarticaM);
}
private void tabPage1_Click(object sender, EventArgs e)
{
}
private void ExitBtn_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void InsertBtn_Click(object sender, EventArgs e)
{
string Sqlquery = null;
string KarticaMString = null;
using (SqlConnection conn = new SqlConnection(KarticaMString))
{
{
Sqlquery = "INSERT INTO KarticaM (DateInsert, DateTransaction, Value, Purpose, DepositLift) VALUES (" + DateInsertPicker.Value + "," + DateTransactionPicker.Value + "," + ValueTxt.Text + "," + PurposeTxt.Text + "," + DepositLiftCombobox.SelectedText + ")";
conn.Open();
using (SqlCommand cmd = new SqlCommand(Sqlquery, conn))
{
cmd.Parameters.Add("@DateInsert", SqlDbType.DateTime).Value = DateInsertPicker.Value;
cmd.Parameters.Add("@DateTransaction", SqlDbType.DateTime).Value = DateTransactionPicker.Value;
cmd.Parameters.Add("@Value", SqlDbType.Money).Value = ValueTxt.Text;
cmd.Parameters.Add("@Purpose", SqlDbType.Text).Value = PurposeTxt.Text;
cmd.Parameters.Add("DepositLift", SqlDbType.Text).Value = DepositLiftCombobox.SelectedValue;
cmd.ExecuteNonQuery();
cmd.Connection = conn;
}
conn.Close();
}
}
}
}
}
我收到此錯誤:( 錯誤
盡管您的主要或第一個問題是ConnectionString
為null
,但我也可以從您的代碼中找到其他錯誤:
1.您的ConnectionString
為null
。
string KarticaMString = null;//assign your connection string here
using (SqlConnection conn = new SqlConnection(KarticaMString))
解:
在將其分配給SqlConnection
對象之前,請分配適當的Connection String
。
例:
string KarticaMString = "Data Source=hostname;Initial
Catalog=mydatabase;uid=uid;pwd=pwd;Integrated Security=True";
2.您的Insert Into
語句可以使用SQL Injection
進行攻擊。
解決方案:使用Parametrised Queries
。
3.使用好像你分配參數SqlCommand.Parameters.AddWithValue()
它們不會反映到您的sql statement
,除非你指定在SQL語句的參數,直到。
解決方案:首先在insert into
語句中添加參數,然后使用SqlCommand.Parameters.AddWithValue()
語句將值添加到各個參數中。
4.您將在調用ExecuteNonQuery()
語句后分配SqlConnection
對象。 解決方案:不需要,因為您之前已經做過。
5. 建議:我的感覺是,您不需要在using{}
塊內聲明它時顯式關閉SqlConnection
對象,可以通過使用塊來注意對象處置。 解決方案:刪除語句conn.Close();
最終解決方案
private void InsertBtn_Click(object sender, EventArgs e)
{
string Sqlquery = null;
string KarticaMString = "@Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Bojan\Desktop\Programiranje\School\Kartice\Kartice\Kartice.mdf;Integrated Security=True;User Instance=True";
using (SqlConnection conn = new SqlConnection(KarticaMString))
{
Sqlquery = "INSERT INTO KarticaM (DateInsert, DateTransaction, Value, Purpose, DepositLift) VALUES (@DateInsert,@DateTransaction,@Value,@Purpose,@DepositLift)";
conn.Open();
using (SqlCommand cmd = new SqlCommand(Sqlquery, conn))
{
cmd.Parameters.Add("@DateInsert", SqlDbType.DateTime).Value = DateInsertPicker.Value;
cmd.Parameters.Add("@DateTransaction", SqlDbType.DateTime).Value = DateTransactionPicker.Value;
cmd.Parameters.Add("@Value", SqlDbType.Money).Value = ValueTxt.Text;
cmd.Parameters.Add("@Purpose", SqlDbType.Text).Value = PurposeTxt.Text;
cmd.Parameters.Add("@DepositLift", SqlDbType.Text).Value = DepositLiftCombobox.SelectedValue;
cmd.ExecuteNonQuery();
}
}
}
注意:
string KarticaMString = null;
using (SqlConnection conn = new SqlConnection(KarticaMString))
{
...
}
連接字符串KarticaMString
顯然為null
。 您必須向SqlConnection
構造函數提供有效的連接字符串。 有關如何編寫有效的連接字符串或使用SqlConnectionStringBuilder
更多信息,請參見ConnectionString
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.