我正在尝试在C#的控件中向数据库添加记录:
public partial class ctrl_Register : UserControl
{
public ctrl_Register()
{
InitializeComponent();
}
private void btn_reg_Click(object sender, EventArgs e)
{
bool ok = false;
int col = 1;
if (tBox_username.Text != "")
{
if (tBox_password.Text != "")
{
if (cBox_colour.Text != "")
{
ok = true;
}
}
}
if (ok)
{
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.data2cString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"INSERT INTO [Table](Id,username,password,colour,bestTime) VALUES ('"+tBox_username.Text+"','"+tBox_password.Text+"','"+cBox_colour.Text+"')";
try
{
conn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("added");
}
catch (SqlException s)
{
MessageBox.Show(s.Message.ToString(), "Error Message");
}
}
}
}
else
{
MessageBox.Show("no insert");
}
}
}
出现消息框“已添加”,因此代码肯定到了这一点。但是,当我检查数据库时,没有新记录。
这是我的创建表代码:
CREATE TABLE [dbo].[Table]
(
[Id] INT IDENTITY (0, 1) NOT NULL,
[username] VARCHAR (50) NOT NULL,
[password] VARCHAR (50) NOT NULL,
[colour] VARCHAR (50) DEFAULT ('Orange') NULL,
[bestTime] INT DEFAULT ((0)) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
绝对是设置文件中正确的连接字符串。但是,当我转到data2.mdf
数据库浏览器中的文件并转到表的“显示数据”时,仅显示NULL。
您没有显示连接字符串-但由于您要说的是“转到Data2.mdf
服务器资源管理器中的文件,因此我认为您可能正在使用一种AttachDbFileName=
方法。
整个AttachDbFileName =方法有缺陷-充其量!在Visual Studio中运行应用程序时,它将在.mdf
文件周围复制(从App_Data
目录复制到输出目录-通常.\bin\debug
-应用程序运行所在的目录),最有可能的是,您的INSERT
工作还不错-但您只是看错了。 mdf文件到底!
如果您要坚持使用这种方法,请尝试在myConnection.Close()
呼叫上设置一个断点-然后.mdf
使用SQL Server Mgmt Studio Express检查该文件-我几乎可以确定您的数据在那里。
在真正的解决办法在我看来,将
安装SQL Server Express(并且您已经完成了此操作)
安装SQL Server Management Studio Express
在SSMS Express中创建数据库,并为其指定一个逻辑名称(例如Data2
)
使用其逻辑数据库名称(在服务器上创建时提供)连接到该数据库-并不要弄乱物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:
Data Source=.\\SQLEXPRESS;Database=Data2;Integrated Security=True
和其他一切是完全相同像以前一样...
另请参阅亚伦·贝特兰德(Aaron Bertrand)出色的博客文章不良习惯:使用AttachDbFileName获取更多背景信息。
而且:永远不要将这样的SQL命令串联在一起-这只是在请求脚本小子来探索SQL注入来攻击您的站点。使用参数化查询-始终,不例外。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句