使用string和varchar(max)之间的比较更新查询

时间:2013-06-06 14:44:45

标签: c# .net sql sql-server ado.net

我有这样的更新查询:

 public void Update_Download(string _url){
            Data.Connect();
            using (Data.connexion)
            {

                string queryString = "update Fichier set Last_download=@last , Downloads_count= Downloads_count + 1  where Url = @url ";


                SqlCommand command = new SqlCommand(queryString, Data.connexion);
                command.Parameters.AddWithValue("@last", DateTime.Now);
                command.Parameters.AddWithValue("@url", _url);
                try
                {
                  SqlDataReader reader = command.ExecuteReader();
                 }
                catch { }

                }
         }


    }
}

字符串连接:

public static SqlConnection connexion;


        public static bool  Connect()
        {
                System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
                builder["Initial Catalog"] = "Upload";
                builder["Data Source"] = "bd";
                builder["integrated Security"] = true;
                string connexionString = builder.ConnectionString;
                connexion = new SqlConnection(connexionString);
                try { connexion.Open(); return true; }
                catch { return false; }

        }
        public static  void Disconnect()
        {
            if (connexion != null) connexion.Close();
            connexion = null;
        }

查询正在执行,但没有在表中更改任何内容。属性Url的类型是varchar(Max),DBMS是Sql Server

那么问题是什么?我该如何更正我的查询?

2 个答案:

答案 0 :(得分:3)

问题是你正在使用ExecuteReader命令。改为:

command.ExecuteNonQuery();

现在,最重要的是,我想提供一些建议。请考虑以下对当前代码的修改:

public void Update_Download(string _url)
{
    try
    {
        using (SqlConnection connexion = Data.Connect())
        {
            string queryString = "update Fichier set Last_download=@last , Downloads_count= Downloads_count + 1  where Url = @url ";

            using (SqlCommand command = new SqlCommand(queryString, connexion))
            {
                command.Parameters.AddWithValue("@last", DateTime.Now);
                command.Parameters.AddWithValue("@url", _url);
                command.ExecuteNonQuery();
            }
        }
    }
    catch (Exception ex)
    {
    }
}

并考虑让Data.Connect()返回new SqlConnection(...)因为您想要遵循该程序。当您需要新连接时,使用new操作获取一个连接,并让SQL Server管理池。 永远不要分享关系。

我不确定你正在分享连接,这只是一个观察。

答案 1 :(得分:1)

是的,正如您在MSDN中可以在此链接中看到的那样:

http://msdn.microsoft.com/en-ca/library/system.data.sqlclient.sqlcommand(v=vs.80).aspx

  

ExecuteNonQuery:执行Transact-SQL INSERT,DELETE,UPDATE和SET语句等命令。

所以尝试使用这种方法,这应该有效!