SQL Insert 语句,没有错误或异常,但没有插入数据
Posted
技术标签:
【中文标题】SQL Insert 语句,没有错误或异常,但没有插入数据【英文标题】:SQL Insert Statement, No error or exception, but data not inserted 【发布时间】:2021-12-27 08:52:09 【问题描述】:我正在处理一个小组项目,而其他小组参与者之一编写了一个页面的后端逻辑。我运行了他的代码,令我惊讶的是没有错误,而且数据也没有插入数据库。如果有异常,我尝试使用try-catch
强制排除异常,但没有。有什么想法可能导致这种情况吗?
private async Task Adding_Com(string company_ID, string company_Name, string address, string website, string contact_No, string logo)
string Query = "INSERT INTO Company (Comp_ID, CompanyLogo, Comp_TelNum, Comp_Name, Comp_Address, Comp_Website) " +
"VALUES (@ComId, @logo, @con, @ComName, @address, @site)";
await Task.Run(() =>
using (var conn = new SqlConnection(connString))
using (var action = new SqlCommand(Query, conn))
action.Parameters.Add("@ComId", SqlDbType.VarChar, 25).Value = company_ID;
action.Parameters.Add("@logo", SqlDbType.VarChar, 225).Value = logo;
action.Parameters.Add("@con", SqlDbType.VarChar, 45).Value = contact_No;
action.Parameters.Add("@ComName", SqlDbType.VarChar, 55).Value = company_Name;
action.Parameters.Add("@address", SqlDbType.VarChar, 55).Value = address;
action.Parameters.Add("@site", SqlDbType.VarChar, 55).Value = website;
conn.OpenAsync();
try
action.ExecuteNonQueryAsync();
_ = MessageBox.Show("Company Has Been Registered");
catch (SqlException ex)
_ = MessageBox.Show(ex.Message);
);
SQL 表
CREATE TABLE Company
(
Comp_ID VARCHAR(25) PRIMARY KEY NOT NULL ,
CompanyLogo VARCHAR(255) NOT NULL,
Comp_TelNum VARCHAR(45) NOT NULL,
Comp_Name VARCHAR(55) NOT NULL,
Comp_Address VARCHAR(55) NOT NULL,
Comp_Website VARCHAR(55) NOT NULL
);
【问题讨论】:
应该是await action.ExecuteNonQueryAsync();
并且没有理由使用Task.Run
@ASh 但它已经在 await Task.Run(() =>
中,这有什么不同
Task.Run 不应该在这里
没有看到你评论的最后部分
您正在编写异步代码,但不要像@ASh 指出的那样等待其完成。如果没有await
,可能会错过可能延迟的sql命令执行,并且执行期间可能发生的异常也会丢失。
【参考方案1】:
您的问题是您应该等待 OpenAsync
和 ExecuteNonQueryAsync
,因为如果您不这样做,可能会发生竞争条件,您将看不到任何事情发生。
您的代码应如下所示:
using (var conn = new SqlConnection(connString))
using (var action = new SqlCommand(Query, conn))
action.Parameters.Add("@ComId", SqlDbType.VarChar, 25).Value = company_ID;
action.Parameters.Add("@logo", SqlDbType.VarChar, 225).Value = logo;
action.Parameters.Add("@con", SqlDbType.VarChar, 45).Value = contact_No;
action.Parameters.Add("@ComName", SqlDbType.VarChar, 55).Value = company_Name;
action.Parameters.Add("@address", SqlDbType.VarChar, 55).Value = address;
action.Parameters.Add("@site", SqlDbType.VarChar, 55).Value = website;
// We wait to the connection to be opened to make sure we do not work with a closed connection
await conn.OpenAsync();
try
// We wait the command to finish before claiming the data was inserted.
await action.ExecuteNonQueryAsync();
_ = MessageBox.Show("Company Has Been Registered");
catch (SqlException ex)
_ = MessageBox.Show(ex.Message);
【讨论】:
以上是关于SQL Insert 语句,没有错误或异常,但没有插入数据的主要内容,如果未能解决你的问题,请参考以下文章
INSERT INTO 语句中的语法错误,没有给出其他详细信息
SQL 错误:“嵌套的 INSERT、UPDATE、DELETE 或 MERGE 语句必须具有 OUTPUT 子句。” - 在 Azure Databricks 中执行时