如何将注册的数据写入数据库

小白晒太阳 2012-05-20 09:35:36
真正实现将注册的账户密码写入数据库(就是程序运行后再去数据库中能查看到数据),而不是写入内存中,具体的语句是什么?我是新手,求大家详细指点指点,非常感谢。
        //连接字符串
ConnectionStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\360data\重要数据\我的文档\用户注册信息.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True";
//创建连接对象
SqlConnection sqlCon = new SqlConnection(ConnectionStr);

//建立插入命令字符串
insertStr = "INSERT INTO 注册信息保存 (username,password,e-mail) VALUES ('"
+ TextBox1.Text + "','" + TextBox2.Text
+ "','"+TextBox4.Text+"')";
try
{
//打开数据
sqlCon.Open();
if (sqlCon.State == ConnectionState.Open)
{
//创建命令对象
SqlCommand sqlComm = new SqlCommand(insertStr, sqlCon);


}
}
catch
{
if (sqlCon.State != ConnectionState.Open)
{

}
}
finally
{
//关闭数据库
sqlCon.Close();
}

在这代码中少了什么语句?求大家详细指点指点,非常感谢。
...全文
655 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 5 楼 的回复:

C# code
protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text == "" || TextBox2.Text == "" || TextBox3.Text == "" || TextBox4.Text == "")
{
……

过滤特殊字符,最好……
[/Quote]恩,以后会注意了。谢谢指导。
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用楼主 的回复:
insertStr = "INSERT INTO 注册信息保存 (username,password,e-mail) VALUES ('"
+ TextBox1.Text + "','" + TextBox2.Text
+ "','"+TextBox4.Text+"')";


在我们这里,你这种代码的性质是“不懂sql语法”的。因为t-sql语法规定了,必须转……
[/Quote]哦,原来是这样,学习了。你们说的老师上课没说,我平时又太懒不爱看书,所以许多东西都不知道。。还好我现在还在学校,要是毕业了都没人要我了。谢谢指导。
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
折腾了一上午头都大了,就有几次数据进入数据库了,大多时候查看数据库里面都是空的,真不知道为什么。这样下去到时候登录系统就没法实现了,真的很郁闷。
EnForGrass 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

C# code
protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text == "" || TextBox2.Text == "" || TextBox3.Text == "" || TextBox4.Text == "")
{
……
[/Quote]
过滤特殊字符,最好是用参数化
  • 打赏
  • 举报
回复
另外,写 try...catch...finally毫无必要。using(){...}语法本来就是干这个用的,使用优雅的语法可以帮助你把精力放在更重要的事情上。例如你可以写
using(var sqlCon = new SqlConnection(ConnectionStr))        try
{
sqlCon.Open();
SqlCommand sqlComm = new SqlCommand(insertStr, sqlCon);
sqlComm.ExecuteNoneQuery();
}
足够了。
  • 打赏
  • 举报
回复
这要写成
insertStr = "INSERT INTO 注册信息保存 (username,password,e-mail) VALUES ('"
+ TextBox1.Text.Replace("'","''") + "','" + TextBox2.Text.Replace("'","''")
+ "','"+TextBox4.Text.Replace("'","''")+"')";
才对。但是这本来应该是常识,你把它另类说成是“麻烦的“‘ ”’符号”那就体现出非常缺乏必要的sql知识了。

一定要记住这个基本常识。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
insertStr = "INSERT INTO 注册信息保存 (username,password,e-mail) VALUES ('"
+ TextBox1.Text + "','" + TextBox2.Text
+ "','"+TextBox4.Text+"')";
[/Quote]

在我们这里,你这种代码的性质是“不懂sql语法”的。因为t-sql语法规定了,必须转换字符串常量中的单引号为两个两个单引号。你的代码转换了吗?如果代码写成这样,是不能上岗编写数据库操纵程序的,可以重新回学校学习sql语法。
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

C# code
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}

最好catch把错误信息提示出来,这样哪里错了,你比较好找
[/Quote]这个其实不用啦,本来就是要让用户注册的,而且注册完要调回登录界面的。
michaelbob518 2012-05-20
  • 打赏
  • 举报
回复
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}

最好catch把错误信息提示出来,这样哪里错了,你比较好找
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

参数化查询是为了避免SQL注入攻击
[/Quote]哦 就是增加安全性对吧?帮我看看我的问题吧,求解决啊。
mizuho_2006 2012-05-20
  • 打赏
  • 举报
回复
参数化查询是为了避免SQL注入攻击
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
    protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text == "" || TextBox2.Text == "" || TextBox3.Text == "" || TextBox4.Text == "")
{
Label1.Text = "注册信息没有填写完整";
}
else
{
Response.Redirect("Default.aspx");
}
string ConnectionStr, insertStr;

//连接字符串
ConnectionStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\360data\重要数据\我的文档\用户注册信息.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True";
//创建连接对象
SqlConnection sqlCon = new SqlConnection(ConnectionStr);

//建立插入命令字符串
insertStr = "INSERT INTO 注册信息保存 ([username],[password],[e-mail]) VALUES (@username,@password,@email)";
try
{
//打开数据

if (sqlCon.State != ConnectionState.Open)
{
sqlCon.Open();
//创建命令对象
SqlCommand sqlComm = new SqlCommand(insertStr, sqlCon);
sqlComm.Parameters.AddWithValue("@username", TextBox1.Text);
sqlComm.Parameters.AddWithValue("@password", TextBox2.Text);
sqlComm.Parameters.AddWithValue("@email", TextBox4.Text);
sqlComm.ExecuteNonQuery();

}
}
catch
{

}
finally
{
//关闭数据库
sqlCon.Close();
}
}
是不是我语句位置放错了?应该放哪?
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
insertStr = "INSERT INTO 注册信息保存 (username,password,e-mail) VALUES ('"
+ TextBox1.Text + "','" + TextBox2.Text
+ "','"+TextBox4.Text+"')";
最好写成 参数化查询
insertStr = "INSERT INT……
[/Quote]
怎么没有实现我想要的结果。。我哪里错了。。
小白晒太阳 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

最好写成 参数化查询

insertStr = "INSERT INTO 注册信息保存 ([username],[password],[e-mail]) VALUES (@username,@password,@email)";

[/Quote]
请问和那么写除了有什么优点?是不避免了麻烦的“‘ ”’符号?
孟子E章 2012-05-20
  • 打赏
  • 举报
回复
insertStr = "INSERT INTO 注册信息保存 (username,password,e-mail) VALUES ('"
+ TextBox1.Text + "','" + TextBox2.Text
+ "','"+TextBox4.Text+"')";
最好写成 参数化查询
insertStr = "INSERT INTO 注册信息保存 ([username],[password],[e-mail]) VALUES (@username,@password,@email)";

try
{
//打开数据

if (sqlCon.State != ConnectionState.Open)
{
sqlCon.Open();
//创建命令对象
SqlCommand sqlComm = new SqlCommand(insertStr, sqlCon);
sqlComm.Parameters.AddWithValue("@username",TextBox1.Text );
sqlComm.Parameters.AddWithValue("@password",TextBox2.Text );
sqlComm.Parameters.AddWithValue("@email",TextBox4.Text );
sqlComm.ExecuteNonQuery();

}
}
catch
{

}
finally
{
//关闭数据库
sqlCon.Close();
}
孟子E章 2012-05-20
  • 打赏
  • 举报
回复
SqlCommand sqlComm = new SqlCommand(insertStr, sqlCon);
sqlComm.ExecuteNonQuery();

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧