Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C将新数据行输入SQL Server Express#_C#_Sql_Visual Studio 2010 - Fatal编程技术网

C# 使用C将新数据行输入SQL Server Express#

C# 使用C将新数据行输入SQL Server Express#,c#,sql,visual-studio-2010,C#,Sql,Visual Studio 2010,我很确定我在这里是愚蠢的,但是哦,好吧 我的代码是: private void btnInsert_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\LiftLog.mdf;Integrated Security=True;User Instance=True"

我很确定我在这里是愚蠢的,但是哦,好吧

我的代码是:

private void btnInsert_Click(object sender, EventArgs e)
{
        SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\LiftLog.mdf;Integrated Security=True;User Instance=True");
        conn.Open();

        SqlCommand cmdInsert = conn.CreateCommand();
        cmdInsert.CommandText = "INSERT INTO tblLog (Date, Time, Floor) VALUES (1011, 0011, 3)";
        cmdInsert.ExecuteNonQuery();
}
它正在连接到表,因为如果我没有将任何数据放入NOTNULL字段,它会抱怨。但是,当我单击按钮时,表不会更新

为什么?

这有助于检索数据:

    System.Data.SqlClient.SqlConnection con;
    System.Data.SqlClient.SqlDataAdapter da;
    DataSet ds1;

    // Connects to database.
    private void Form1_Load(object sender, EventArgs e)
    {
        con = new System.Data.SqlClient.SqlConnection();
        ds1 = new DataSet();
        con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\LiftLog.mdf;Integrated Security=True;User Instance=True";
        con.Open();
        string sql = "SELECT * From tblLog";
        da = new System.Data.SqlClient.SqlDataAdapter(sql, con);
        da.Fill(ds1, "LogOutput");
        NavigateRecords();
        con.Close(); 
     }
由于SSMS对我不起作用,是否可以通过某种方式修改它以插入

此外,我知道如何清理输入等,我将其全部剥离,以尝试找出问题所在。

整个用户实例和AttachDbFileName=方法存在缺陷-最多!Visual Studio将围绕
.mdf
文件(在Visual Studio中运行应用程序时,将其复制到项目的输出目录)进行复制,并且很可能,您的
插入
工作正常-但您最后看到的是错误的.mdf文件

如果您想继续使用这种方法,请尝试在
myConnection.Close()
调用上放置一个断点,然后使用SQL Server Mgmt Studio Express检查
.mdf
文件(在项目的输出目录中)-我几乎可以肯定您的数据在那里

我认为真正的解决办法是

  • 安装SQL Server Express(您已经完成了安装)

  • 安装SQL Server Management Studio Express

  • 在SSMS Express中创建数据库,并为其指定一个逻辑名称(例如
    LiftLog

  • 使用其逻辑数据库名称连接到它(在服务器上创建时提供),不要乱动物理数据库文件和用户实例。在这种情况下,您的连接字符串类似于:

    Data Source=.\\SQLEXPRESS;Database=LiftLog;Integrated Security=True
    
    其他一切都和以前一样

  • 另外,请注意:我强烈建议始终使用参数化查询,a)避免SQL注入攻击,b)显著提高SQL Server的性能

    因此,不是:

    cmdInsert.CommandText = "INSERT INTO tblLog (Date, Time, Floor) 
                             VALUES (1011, 0011, 3)";
    
    你应该使用

    cmdInsert.CommandText = "INSERT INTO tblLog (Date, Time, Floor) 
                             VALUES (@Date, @Time, @Floor)";
    

    然后在
    SqlCommand
    对象上定义这些参数(
    @Date、@Time、@Floor
    ),并以这种方式填写它们的值。

    还有他的
    插入tblLog(Date,Time,Floor)值(10110011,3)
    看起来插入的值不正确(如果前两列是DATETIME,Date或Time数据类型)@Kaf:这可能是一个额外的问题-更不用说应该始终使用参数化查询,而不是直接指定值…@marc_s Welp,SSMS安装失败。在项目的文件中,有一个“LiftLog.mdf”数据库,我可以直接链接到它吗?此外,我还更新了原始帖子中有关数据集读取命令的信息,该命令运行良好。@杰克:您应该能够在Visual Studio 2010服务器资源管理器中打开该
    .mdf
    ,并查看其中的内容……是的。是的。这是我一直在读取+修改的数据,但显然没有更新。