我可以在我的程序中执行删除,插入和更新,并尝试通过从我的数据库中调用创建的存储过程来执行插入操作.
这个按钮插件我工作得很好.
private void btnAdd_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(dc.Con);
SqlCommand cmd = new SqlCommand("Command String", con);
da.InsertCommand = new SqlCommand("INSERT INTO tblContacts VALUES (@FirstName, @LastName)", con);
da.InsertCommand.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
da.InsertCommand.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;
con.Open();
da.InsertCommand.ExecuteNonQuery();
con.Close();
dt.Clear();
da.Fill(dt);
}
Run Code Online (Sandbox Code Playgroud)
这是调用名为sp_Add_contact
添加联系人的过程的按钮的开始.这两个参数sp_Add_contact(@FirstName,@LastName)
.我在谷歌搜索了一些很好的例子,但我没有发现任何有趣的东西.
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(dc.Con);
SqlCommand cmd = new SqlCommand("Command String", con);
cmd.CommandType = CommandType.StoredProcedure;
???
con.Open();
da. ???.ExecuteNonQuery();
con.Close();
dt.Clear();
da.Fill(dt);
}
Run Code Online (Sandbox Code Playgroud) 基本上Commands
有Parameters
和参数有像Add
,AddWithValue
等等的功能.在我看过的所有教程中,我通常注意到他们正在使用Add
而不是AddWithValue
.
.Parameters.Add("@ID", SqlDbType.Int)
Run Code Online (Sandbox Code Playgroud)
VS
.Parameters.AddWithValue("@ID", 1)
Run Code Online (Sandbox Code Playgroud)
有没有理由不使用AddWithValue
?我宁愿用那个
Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1
Run Code Online (Sandbox Code Playgroud)
因为它节省了我的编码时间.那么哪个更好用?哪个使用安全?它会提高性能吗?
我已经以RadGrid
编程方式创建了一个并使用NeedDataSource
- > 绑定它GetDataTable
.
在其中GetDataTable
,我调用我的connstring并用适配器填充网格(参见下面的代码).问题是,在我的SQL Server中,查询需要0秒才能运行,但是在ASP.NET调试模式下,它需要大约3~5秒,在我的情况下,页面上有很多RadGrids,这导致我的页面加载缓慢.
这是adapter.Fill
一般问题的处理速度还是我对设置做错了?(即conn.open/close或其他任何订单)?
public DataTable GetDataTable(int Year, int month, string datatype)
{
String ConnString = ConfigurationManager.ConnectionStrings["IHG_MSTConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(ConnString);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand("[Yield_Planner_With_Strategy]", conn);
adapter.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure;
adapter.SelectCommand.Parameters.AddWithValue("@Holidex_Code", RadComboBox_Hotels.SelectedValue);
adapter.SelectCommand.Parameters.AddWithValue("@Event_Year", Year);
adapter.SelectCommand.Parameters.AddWithValue("@Event_Month", month);
adapter.SelectCommand.Parameters.AddWithValue("@DataType", datatype);
adapter.SelectCommand.Parameters.AddWithValue("@MktSeg", Fruitful.Get_Checked_Values_As_CSV(RadComboBox_MktSeg));
string exportdate = DateTime.Now.ToString("yyyy/MM/dd");
if (RadComboBox_ExportTimeStamp.Text != "" && RadComboBox_ExportTimeStamp.Text != "Create New Strategy")
{ exportdate = Convert.ToDateTime(RadComboBox_ExportTimeStamp.Text).ToString("yyyy/MM/dd"); }
adapter.SelectCommand.Parameters.AddWithValue("@ExportTimeStamp", exportdate);
DataTable myDataTable …
Run Code Online (Sandbox Code Playgroud) 我有一个数据类型的 C# 属性,bool
当它被设置时,它变成了一个True
或False
.
但是我需要它与类型的 SQL Server 表列匹配,bit
以便将其保存为 1 或 0。
SQL Server 列:
StormOut bit
Run Code Online (Sandbox Code Playgroud)
C# 属性
public bool StormOut { get; set; }
Run Code Online (Sandbox Code Playgroud)
C# SQL 语句:
string querystring = "UPDATE tblSignOnOff SET StormOut = " + storm.StormOut + " WHERE id = 1902";
Run Code Online (Sandbox Code Playgroud)
否则当前 C# 中的 SQL 语句是
UPDATE tblSignOnOff
SET StormOut = True
WHERE id = 1902
Run Code Online (Sandbox Code Playgroud)
这导致错误:
无效的列名“真”。
我希望这是一个正确的问题,parameters.addwithvalue
工作怎么样?我正在考虑防止SQL注入?我一直在Stackoverflow上看很多,很多人说"//反对sql注入".我一直在盲目地使用它,但现在我必须提交一份关于我的任务的文章,我需要解释为什么它是保护.我一直试图在MSDN上找到一些东西,找到了这个:
SQL注入但它使用了parameters.add
.然后我读到他们替换.Add
了.AddWithValue
,是真的吗?那么任何官员呢?
所以基本上,任何人都可以更好地搜索一些可以防止SQL注入的官方文书工作?或者可以告诉我它是如何工作的?
我不是想让你做我的工作,我只是找不到自己.
我这样使用它:
using (SqlConnection conn = new SqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
String queryString = "DELETE FROM dbo.SecurityAccess WHERE Username = ' @Username ";
cmd.CommandText = queryString;
cmd.Parameters.AddWithValue("@Username", Username);
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)