繁体   English   中英

异常未处理的 SQL INTO

[英]Exception unhandled SQL INTO

我目前正在创建一个登录和退出表单,并且正在尝试使登录部分起作用,这会将文本框中的数据从 ac# 表单链接到 SQL 数据库

我的问题是:这个系统中的语法错误是什么?

我目前收到消息:

System.Data.SqlClient.SqlException: '关键字'INTO'附近的语法不正确。'

我的代码是:

 private void AcceptData()
    {
        using (Connection = new SqlConnection(connectionString))
        {
            Connection.Open();

            using (SqlDataAdapter adapter = new SqlDataAdapter("INPUT INTO Person", Connection))//this is currently where it says the error is
            {
                DataTable RegisterTable = new DataTable();
                adapter.Fill(RegisterTable); //System.InvalidOperationException: 'The ConnectionString property has not been initialized.' TO FIX

                string name = textBox1.Text;
                string organisation = textBox3.Text;
                DateTime Time = DateTime.Parse(textBox2.Text);
                string strDateTimeIn = Time.ToString("yyyy-MM-dd HH:mm:ss.ffff");
                string query = "INSERT INTO Person (Name,Organisation,TimeIn) VALUES('" + name + "','" + organisation + "','" + strDateTimeIn + "')";
                SqlCommand SignIn = new SqlCommand(query, Connection);
                SignIn.ExecuteNonQuery(); // this should be fine currently

            }
        }

    }

请帮忙,先谢谢汤姆

如果我只需要使用 ADO.Net,我会(几乎)是这样编写它的:

DateTime timeIn;
// I would rather use TryParseExact, I just don't know what format you expect...
if(DateTime.TryParse(textBox2.Text, out timeIn)) 
{
    using (var Connection = new SqlConnection(connectionString))
    {
        string query = "INSERT INTO Person (Name,Organisation,TimeIn) VALUES(@Name, @Organisation, @TimeIn)";
        using(var SignIn = new SqlCommand(query, Connection))
        {
            SignIn.Parameters.Add("@Name", SqlDbType.NVarChar).Value = textBox1.Text;
            SignIn.Parameters.Add("@Organisation", SqlDbType.NVarChar).Value = textBox3.Text;
            SignIn.Parameters.Add("@TimeIn", SqlDbType.DateTime).Value = timeIn;
            Connection.Open();
            SignIn.ExecuteNonQuery(); // this should be fine currently
        }
    }
}

使用ADONETHelper (我写的一个项目,你可以从 GitHub 下载)我会这样做:

DateTime timeIn;
// Still prefer to use TryParseExact....
if(DateTime.TryParse(textBox2.Text, out timeIn))
{
    var query = "INSERT INTO Person (Name,Organisation,TimeIn) VALUES(@Name, @Organisation, @TimeIn)";
    var parameters = new IDbDataParameter[]
    {
        _DB.CreateParameter("@Name", ADONETType.NVarChar, textBox1.Text),
        _DB.CreateParameter("@Organisation", ADONETType.NVarChar, textBox3.Text),
        _DB.CreateParameter("@TimeIn", ADONETType.DateTime, timeIn)
    };
    _DB.ExecuteNonQuery(query, CommandType.Text, parameters);
}

现在在这种情况下它只为您节省 4 行代码,但通常单个项目包含对数据库的多次调用 - 选择、添加、编辑和删除记录。 这是当您看到 ADONETHelper 的贡献时 - 它使您免于大量代码重复,并为您封装了大部分 ADO.Net 管道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM