gpt4 book ai didi

c# - 将字符串返回给有关搜索的 SQL 服务器查询

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:18 24 4
gpt4 key购买 nike

我正在尝试查明正在上传的文件是否已存在于服务器中。我执行此操作的一种方法是检查是否存在相同的文件名。但是,代码中的某些内容似乎不正确。我已经使用 SSMS 运行查询并且它有效,但是当我将它放入 Visual Studio 时,我的返回类型是 SQL.Data.Command 而不是实际的字符串本身。有人可以指出我正确的方向吗?

if (coda_file_upload.HasFile)
{
coda = Path.GetFileName(filePath); //gets the file name
using (connection = new SqlConnection(connection_string))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;

cmd.CommandText = "SELECT * FROM name_table WHERE file_name LIKE '%"+coda+"%' ";

cmd.Connection = connection;
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();

string sample = Convert.ToString(cmd);

if (cmd.ToString().Equals(String.Empty))
{
coda_file_upload.SaveAs(Server.MapPath("~/") + coda);
input_data = System.IO.File.ReadAllText(Server.MapPath("~/") + coda);
parse_CODA(input_data, coda);

testing.Text = "Success";
}

else
testing.Text = "File exists, please try another file.";

}

每次都会执行我的“else”而不是 if。为了仔细检查,我打印了对“string sample”的查询,然后我看到返回的值是 SQL.Data.Command

最佳答案

你的代码有两个大问题:

  1. 不要连接字符串来生成 sql 命令文本。
  2. 对选择查询使用 ExecuteNonQuery 是错误的。你需要 ExecuteReader或执行标量

让我们看看我是如何修复代码的

string input_data = string.Empty;
using (connection = new SqlConnection(connection_string))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;

cmd.CommandText = "SELECT * FROM name_table WHERE file_name LIKE @name";
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = "%" + filename + "%";
cmd.Connection = connection;
connection.Open();

// Try to execute the command and read back the results.
SqlDataReader reader = cmd.ExecuteReader();

// If there is no record or the field to check for emptyness is empty
if(!reader.Read() || string.IsNullOrEmpty(reader.GetString("SampleField"))
input_data = AcceptFile(coda);
else
testing.Text = "File exists, please try another file.";
}

private string AcceptFile(string coda)
{
coda_file_upload.SaveAs(Server.MapPath("~/") + coda);
string readText = System.IO.File.ReadAllText(Server.MapPath("~/") + coda);
parse_CODA(readText, coda);
testing.Text = "Success";
return readText;
}

如果您只是想知道是否存在与字段名匹配的行,那么您不需要检索任何记录,但您可以只使用 ExecuteScalar再加上 T-SQL operator EXISTS从单行中获取单个值

cmd.CommandText = @"IF EXISTS(SELECT 1 FROM name_table 
WHERE file_name LIKE @name)
SELECT 1 ELSE SELECT 0";
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = "%" + filename + "%";
int result = Convert.ToInt32(cmd.ExecuteScalar());
if(result == 0)
.... no record found....
else
.... record exists...

从所述错误的一部分来看,您的问题是由于您不能使用对 SqlCommand 的引用并应用 ToString 希望得到有意义的东西这一事实引起的。该类不能使用 ToString 来执行命令并返回返回数据集中存在的任何字段。该类仅返回其自身的完整限定名。

关于c# - 将字符串返回给有关搜索的 SQL 服务器查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46525636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com