Solved

ASP.Net GridView ObjectDataSource Issue

Posted on 2010-11-24
6
1,101 Views
Last Modified: 2012-05-10
Dear Friends,

I am working on a GridView with ObjectDataSource and getting the following error.

"ObjectDataSource 'MyDataSource' could not find a non-generic method 'SelectMethod' that has parameters: MaxRows, StartRow. "

Please help to sort this issue. The complete code is given below:

.aspx -- Only the gridview and objectdatasource is given but there are other controls.

 <div id="divGrid" runat="server">
        <asp:GridView ID="gvGrid" runat="server" AllowPaging="true" AllowSorting="false" PageSize="4"
            DataKeyNames="SupplierID" AutoGenerateColumns="false" CellPadding="2" DataSourceID="MyDataSource">
        </asp:GridView>
       
  <asp:ObjectDataSource ID="MyDataSource" runat="server" TypeName="OMS.DAL.SupplierBL"
        SelectCountMethod="SelectCountMethod" SelectMethod="SelectMethod" EnablePaging="true" StartRowIndexParameterName="StartRow" MaximumRowsParameterName="MaxRows">
        </asp:ObjectDataSource>
     </div>



-------------------------------------------------------------------------

OMS.DAL.SupplierBL



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OMS.Entity;
using OMS.DAL;

namespace OMS.DAL
{
    public class SupplierBL
    {
        public SupplierBL()
        {
        }

        private int totalRows;

        public SupplierCollection SelectMethod(int MaxRows, int StartRow, string supplierName, string supplierEmail, int countryID, int cityID)
        {
            try
            {
                Supplier sup = new Supplier();
                SupplierCollection suc = new SupplierCollection();

                sup.SupplierName = supplierName;
                sup.SupplierEmail = supplierEmail;
                sup.SupplierCountry = countryID;
                sup.SupplierCity = cityID;

                SupplierDataSource sd = new SupplierDataSource();

                int totRows = 0;
                suc = sd.SupplierSearch(sup, StartRow, MaxRows, ref totRows);

                totalRows = totRows;

                return suc;


            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {

            }

        }

        public int SelectCountMethod()
        {
            return totalRows;
        }
    }
}


----------------------------------------------------------------------------



using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using OMS.Entity;

namespace OMS.DAL
{
    public class SupplierDataSource
    {
        private SqlConnection con;
        private SqlCommand cmd;
        private DataSet ds;
        private SqlDataAdapter da;
        private SqlDataReader dr;

        private string connectionString;
        public SupplierDataSource()
        {
            con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ToString());
            connectionString = ConfigurationManager.ConnectionStrings["ConStr"].ToString();
        }

        public Int32 SupplierAdd(Supplier sup)
        {
            Int32 rowsAffected = 0;
            try
            {
                using (SqlConnection con1 = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd1 = new SqlCommand("SupplierInsert", con1))
                    {
                        cmd1.CommandType = CommandType.StoredProcedure;

                        cmd1.Parameters.AddWithValue("@SupplierID", sup.SupplierID);
                        cmd1.Parameters.AddWithValue("@SupplierName", sup.SupplierName);
                        cmd1.Parameters.AddWithValue("@SupplierAddress1", sup.SupplierAddress1);
                        cmd1.Parameters.AddWithValue("@SupplierAddress2", sup.SupplierAddress2);
                        cmd1.Parameters.AddWithValue("@SupplierCity", sup.SupplierCity);
                        cmd1.Parameters.AddWithValue("@SupplierCountry", sup.SupplierCountry);
                        cmd1.Parameters.AddWithValue("@SupplierPinCode", sup.SupplierPinCode);
                        cmd1.Parameters.AddWithValue("@SupplierEmail", sup.SupplierEmail);
                        cmd1.Parameters.AddWithValue("@SupplierTelephone", sup.SupplierTelephone);

                        con1.Open();

                        rowsAffected = cmd1.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " -- " + ex.InnerException);
            }
            finally
            {
            }

            return rowsAffected;
        }

        public int SupplierUpdate(Supplier sup)
        {
            Int32 rowsAffected = 0;
            try
            {
                using (SqlConnection con1 = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd1 = new SqlCommand("SupplierUpdate", con1))
                    {
                        cmd1.CommandType = CommandType.StoredProcedure;

                        cmd1.Parameters.AddWithValue("@SupplierID", sup.SupplierID);
                        cmd1.Parameters.AddWithValue("@SupplierName", sup.SupplierName);
                        cmd1.Parameters.AddWithValue("@SupplierAddress1", sup.SupplierAddress1);
                        cmd1.Parameters.AddWithValue("@SupplierAddress2", sup.SupplierAddress2);
                        cmd1.Parameters.AddWithValue("@SupplierCity", sup.SupplierCity);
                        cmd1.Parameters.AddWithValue("@SupplierCountry", sup.SupplierCountry);
                        cmd1.Parameters.AddWithValue("@SupplierPinCode", sup.SupplierPinCode);
                        cmd1.Parameters.AddWithValue("@SupplierEmail", sup.SupplierEmail);
                        cmd1.Parameters.AddWithValue("@SupplierTelephone", sup.SupplierTelephone);

                        con1.Open();

                        rowsAffected = cmd1.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " -- " + ex.InnerException);
            }
            finally
            {
            }

            return rowsAffected;
        }


        public int SupplierDelete(int supID)
        {
            Int32 rowsAffected = 0;
            try
            {
                using (SqlConnection con1 = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd1 = new SqlCommand("SupplierDelete", con1))
                    {
                        cmd1.CommandType = CommandType.StoredProcedure;

                        con1.Open();

                        rowsAffected = cmd1.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " -- " + ex.InnerException);
            }
            finally
            {
            }

            return rowsAffected;
        }


        public Supplier SupplierFetchByID(int supID)
        {
            Supplier sup = new Supplier();
            try
            {
                using (SqlConnection con1 = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd1 = new SqlCommand("SupplierFetchByID", con1))
                    {
                        cmd1.CommandType = CommandType.StoredProcedure;

                        cmd1.Parameters.AddWithValue("SupplierID", supID);

                        con1.Open();

                        //Int32 rowsAffected = cmd1.ExecuteNonQuery();

                        SqlDataReader dr = cmd1.ExecuteReader();

                        if (dr.HasRows)
                        {
                            while (dr.Read())
                            {
                                sup.SupplierID = dr.GetInt32(0);
                                sup.SupplierName = dr.GetString(1);
                                sup.SupplierAddress1 = dr.GetString(2);
                                sup.SupplierAddress2 = dr.GetString(3);
                                sup.SupplierCity = dr.GetInt32(4);
                                sup.SupplierCountry = dr.GetInt32(5);
                                sup.SupplierPinCode = dr.GetString(6);
                                sup.SupplierEmail = dr.GetString(7);
                                sup.SupplierTelephone = dr.GetString(8);
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " -- " + ex.InnerException);
            }
            finally
            {
            }
            return sup;
        }


        public SupplierCollection SupplierSearch(Supplier sup, int startRowIndex, int maximumRows, ref int totalRows)
        {
           

            SupplierCollection suc = new SupplierCollection();
            Supplier su = new Supplier();

            try
            {
                using (SqlConnection con1 = new SqlConnection("connectionString"))
                {
                    using (SqlCommand cmd1 = new SqlCommand("SupplierSearch", con1))
                    {
                        cmd1.CommandType = CommandType.StoredProcedure;

                        //cmd1.Parameters.AddWithValue("@SupplierID", sup.SupplierID);

                        cmd1.Parameters.AddWithValue("@SupplierName", sup.SupplierName);

                       // cmd1.Parameters.AddWithValue("@SupplierAddress1", sup.SupplierAddress1);

                        //cmd1.Parameters.AddWithValue("@SupplierAddress2", sup.SupplierAddress2);

                        cmd1.Parameters.AddWithValue("@SupplierCity", sup.SupplierCity);

                        cmd1.Parameters.AddWithValue("@SupplierCountry", sup.SupplierCountry);

                       // cmd1.Parameters.AddWithValue("@SupplierPinCode", sup.SupplierPinCode);

                        cmd1.Parameters.AddWithValue("@SupplierEmail", sup.SupplierEmail);

                        cmd1.Parameters.AddWithValue("@StartRowIndex", startRowIndex);

                        cmd1.Parameters.AddWithValue("@MaximumRows", maximumRows);

                        cmd1.Parameters.AddWithValue("@TotalRow", 0);

                        SqlDataReader dr;

                        con1.Open();
                        dr = cmd1.ExecuteReader();

                        if (dr.HasRows)
                        {
                            while (dr.Read())
                            {
                                su = new Supplier();

                                su.SupplierID = dr.GetInt32(0);
                                su.SupplierName = dr.GetString(1);
                                su.SupplierAddress1 = dr.GetString(2);
                                su.SupplierAddress2 = dr.GetString(3);
                                su.SupplierCity = dr.GetInt32(4);
                                su.SupplierCountry = dr.GetInt32(5);
                                su.SupplierPinCode = dr.GetString(6);
                                su.SupplierEmail = dr.GetString(7);
                                su.SupplierTelephone = dr.GetString(8);

                                suc.Add(su);
                            }

                        }

                        totalRows = int.Parse(cmd1.Parameters["@TotalRows"].ToString());

                        con1.Close();

                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " -- " + ex.InnerException);
            }
            finally
            {
            }

            return suc;

        }

    }
}


_________________________________________

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;

namespace OMS.Entity
{
    public class Supplier
    {
        private int supplierID;
        private string supplierName;
        private string supplierAddress1;
        private string supplierAddress2;
        private int supplierCity;
        private int supplierCountry;
        private string supplierPinCode;
        private string supplierEmail;
        private string supplierTelephone;

        public int SupplierID
        {
            get { return supplierID; }
            set { supplierID = value; }
        }

        public string SupplierName
        {
            get { return supplierName; }
            set { supplierName = value; }
        }

        public string SupplierAddress1
        {
            get { return supplierAddress1; }
            set { supplierAddress1 = value; }
        }

        public string SupplierAddress2
        {
            get { return supplierAddress2; }
            set { supplierAddress2 = value; }
        }

        public int SupplierCity
        {
            get { return supplierCity; }
            set { supplierCity = value; }
        }

        public int SupplierCountry
        {
            get { return supplierCountry; }
            set { supplierCountry = value; }
        }

        public string SupplierPinCode
        {
            get { return supplierPinCode; }
            set { supplierPinCode = value; }
        }

        public string SupplierEmail
        {
            get { return supplierEmail; }
            set { supplierEmail = value; }
        }

        public string SupplierTelephone
        {
            get { return supplierTelephone; }
            set { supplierTelephone = value; }
        }
   
    }

    public class SupplierCollection : Collection<Supplier> { }
}

-----------------------------------------------------------------------

Stored Procedure:

USE [OMS]
GO
/****** Object:  StoredProcedure [dbo].[SupplierSearch]    Script Date: 11/25/2010 11:36:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SupplierSearch]
(
        @SupplierName           VARCHAR(50) = NULL, -- default to NULL
        @SupplierCity           INT = NULL,
        @SupplierCountry        INT = NULL,
        @SupplierEmail          VARCHAR(50) = NULL,
        @StartRowIndex                  INT,
        @MaximumRows                  INT,
        @TotalRow                        INT OUTPUT
)
AS
BEGIN
      
DECLARE @first_id int, @startRow INT
DECLARE @StringCity VARCHAR(20)
DECLARE @StringCountry VARCHAR(20)

IF @StartRowIndex > 0
SET @StartRowIndex =  (@StartRowIndex - 1)  * @MaximumRows

IF @StartRowIndex = 0
SET @StartRowIndex = 1

--PRINT @StartRowIndex
SET ROWCOUNT @StartRowIndex



IF RTRIM(@SupplierName)='' OR @SupplierName IS NULL
      SET @SupplierName = '%'
ELSE
      SET @SupplierName = @SupplierName + '%'
IF RTRIM(@SupplierEmail)='' OR @SupplierEmail IS NULL
      SET @SupplierEmail = '%'
ELSE
      SET @SupplierEmail = @SupplierEmail + '%'
IF RTRIM(@SupplierCity)='' OR @SupplierCity = 0
      SET @StringCity = '%'
ELSE
      SET @StringCity = CONVERT(VARCHAR(20),@SupplierCity)
IF RTRIM(@SupplierCountry)='' OR @SupplierCountry = 0
      SET @StringCountry = '%'
ELSE
      SET @StringCountry = CONVERT(VARCHAR(20),@SupplierCountry)
      



               
        -- Append % for LIKE operator search (if not NULL)
--        IF @SupplierName IS NULL
--                SET @SupplierName = @SupplierName + '%'
--
--        IF @SupplierEmail IS NULL
--                SET @SupplierEmail = @SupplierEmail + '%'
               
  PRINT Convert(varchar(30),@StartRowIndex) + ' - @StartRowIndex'
  PRINT Convert(varchar(30),@MaximumRows) + ' - @MaximumRows'
 
  PRINT Convert(varchar(30),@SupplierName) + ' - @SupplierName'
  PRINT Convert(varchar(30),@StringCity) + ' - @SupplierCity'
  PRINT Convert(varchar(30),@StringCountry) + ' - @StringCountry'
  PRINT Convert(varchar(30),@SupplierEmail) + ' - @SupplierEmail'
 
 
       
        SET ROWCOUNT @StartRowIndex
       
        SELECT @first_id = SupplierID FROM Supplier Where
                        (@SupplierName IS NULL OR [SupplierName] LIKE @SupplierName) AND -- If passed only applies to filter
                --(SupplierCity = IsNull(@SupplierCity,SupplierCity)) AND
                --(SupplierCountry = IsNull(@SupplierCountry,SupplierCountry)) AND
               
                 (SupplierCity like @StringCity) AND
                (SupplierCountry like @StringCountry) AND
               
                (@SupplierEmail IS NULL OR SupplierEmail LIKE @SupplierEmail)  
        ORDER BY SupplierID
               
        PRINT Convert(varchar(30),@first_id) + ' - First ID'
               
            SET ROWCOUNT @MaximumRows
            
        SELECT * FROM Supplier WHERE
                (@SupplierName IS NULL OR [SupplierName] LIKE @SupplierName) AND -- If passed only applies to filter
--                (SupplierCity = IsNull(@SupplierCity,SupplierCity)) AND
--                (SupplierCountry = IsNull(@SupplierCountry,SupplierCountry)) AND

                         (SupplierCity like @StringCity) AND
                (SupplierCountry like @StringCountry) AND
                (@SupplierEmail IS NULL OR SupplierEmail LIKE @SupplierEmail) AND
                (SupplierID > @first_id) ORDER BY SupplierID
       
        SET ROWCOUNT 0
       
       
        SELECT @TotalRow = COUNT(*) FROM Supplier
          WHERE
                (@SupplierName IS NULL OR [SupplierName] LIKE @SupplierName) AND -- If passed only applies to filter
--                (SupplierCity = IsNull(@SupplierCity,SupplierCity)) AND
--                (SupplierCountry = IsNull(@SupplierCountry,SupplierCountry)) AND

                        (SupplierCity like @StringCity) AND
                (SupplierCountry like @StringCountry) AND
                (@SupplierEmail IS NULL OR SupplierEmail LIKE @SupplierEmail)
         
         PRINT Convert(varchar(30),@TotalRow) + ' - Total Rows'    
       
END


0
Comment
Question by:MadhuMenong
  • 3
  • 2
6 Comments
 
LVL 5

Accepted Solution

by:
buraksarica earned 500 total points
ID: 34210877
Did you define the selectMethod parameters in the object datasource definition? I can't see them.

<asp:ObjectDataSource ID="MyDataSource" runat="server" TypeName="OMS.DAL.SupplierBL"
        SelectCountMethod="SelectCountMethod" SelectMethod="SelectMethod" EnablePaging="true" StartRowIndexParameterName="StartRow" MaximumRowsParameterName="MaxRows">
        </asp:ObjectDataSource>

Open in new window

0
 
LVL 10

Expert Comment

by:P1ST0LPETE
ID: 34210966
I don't use the ObjectDataSource myself, but based off of the error message:

"ObjectDataSource 'MyDataSource' could not find a non-generic method 'SelectMethod' that has parameters: MaxRows, StartRow. "

It would appear that the compiler is looking for a method like this:

public void SelectMethod(int MaxRows, int StartRow)
{
      //Code.....
}

Since those are the only two parameters you define in your asp markup
0
 
LVL 5

Assisted Solution

by:buraksarica
buraksarica earned 500 total points
ID: 34211025
You need to define the parameters other than StartRow and MaxRows, for example :

<asp:ObjectDataSource ID="MyDataSource" runat="server" TypeName="OMS.DAL.SupplierBL"
        SelectCountMethod="SelectCountMethod" SelectMethod="SelectMethod" EnablePaging="true" StartRowIndexParameterName="StartRow" MaximumRowsParameterName="MaxRows">
<asp:QueryStringParameter Name="supplierName" QueryStringField="supplierName" Type="String" />
<asp:QueryStringParameter Name="supplierEmail" QueryStringField="supplierEmail" Type="String" />
<asp:QueryStringParameter Name="cityID" QueryStringField="cityID" Type="Int32" />
        </asp:ObjectDataSource>

Open in new window


Of course querystringparameter is just an example. You can use other types of parameters too.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:MadhuMenong
ID: 34211046
Hi buraksarica,

U R right i forgot to define the <selectParameters> and have done so as below:

 <asp:GridView ID="gvGrid" runat="server" AllowPaging="true" AllowSorting="false"
            PageSize="4" DataKeyNames="SupplierID" AutoGenerateColumns="false" CellPadding="2"
            DataSourceID="MyDataSource">
        </asp:GridView>
        <asp:ObjectDataSource ID="MyDataSource" runat="server" TypeName="OMS.DAL.SupplierBL"
            SelectCountMethod="SelectCountMethod" SelectMethod="SelectMethod" EnablePaging="true"
            StartRowIndexParameterName="StartRow" MaximumRowsParameterName="MaxRows">
            <SelectParameters>
                <asp:Parameter Name="StartRow" Type="Int32" />
                <asp:Parameter Name="MaxRows" Type="Int32" />
                <asp:ControlParameter ControlID="tbSupplierNames" Name="supplierName" PropertyName="Text" />
                 <asp:ControlParameter ControlID="tbSupplierEmailS" Name="supplierEmail" PropertyName="Text" />
                  <asp:ControlParameter ControlID="ddlCountryS" Name="countryID" PropertyName="SelectedValue" />
                  <asp:ControlParameter ControlID="ddlCityS" Name="cityID" PropertyName="SelectedValue" />
               
            </SelectParameters>
        </asp:ObjectDataSource>


But now i am faced with  a new problem.

____________________________________________________

SupplierDataSource  -- > below method

" totalRows = int.Parse(cmd1.Parameters["@TotalRows"].ToString());" at this line getting error "Input string not in correct format." . Can you advise please.

     public SupplierCollection SupplierSearch(Supplier sup, int startRowIndex, int maximumRows, ref int totalRows)
        {
           

            SupplierCollection suc = new SupplierCollection();
            Supplier su = new Supplier();

            try
            {
                using (SqlConnection con1 = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd1 = new SqlCommand("SupplierSearch", con1))
                    {
                        cmd1.CommandType = CommandType.StoredProcedure;

                        //cmd1.Parameters.AddWithValue("@SupplierID", sup.SupplierID);

                        cmd1.Parameters.AddWithValue("@SupplierName", sup.SupplierName);

                       // cmd1.Parameters.AddWithValue("@SupplierAddress1", sup.SupplierAddress1);

                        //cmd1.Parameters.AddWithValue("@SupplierAddress2", sup.SupplierAddress2);

                        cmd1.Parameters.AddWithValue("@SupplierCity", sup.SupplierCity);

                        cmd1.Parameters.AddWithValue("@SupplierCountry", sup.SupplierCountry);

                       // cmd1.Parameters.AddWithValue("@SupplierPinCode", sup.SupplierPinCode);

                        cmd1.Parameters.AddWithValue("@SupplierEmail", sup.SupplierEmail);

                        cmd1.Parameters.AddWithValue("@StartRowIndex", startRowIndex);

                        cmd1.Parameters.AddWithValue("@MaximumRows", maximumRows);

                        cmd1.Parameters.Add("@TotalRows", SqlDbType.Int);
                        cmd1.Parameters["@TotalRows"].Direction = ParameterDirection.Output;
                        cmd1.Parameters["@TotalRows"].Value = 0;

                        //cmd1.Parameters.AddWithValue("@TotalRows", 0);

                        SqlDataReader dr;

                        con1.Open();
                        dr = cmd1.ExecuteReader();

                        if (dr.HasRows)
                        {
                            while (dr.Read())
                            {
                                su = new Supplier();

                                su.SupplierID = dr.GetInt32(0);
                                su.SupplierName = dr.GetString(1);
                                su.SupplierAddress1 = dr.GetString(2);
                                su.SupplierAddress2 = dr.GetString(3);
                                su.SupplierCity = dr.GetInt32(4);
                                su.SupplierCountry = dr.GetInt32(5);
                                su.SupplierPinCode = dr.GetString(6);
                                su.SupplierEmail = dr.GetString(7);
                                su.SupplierTelephone = dr.GetString(8);

                                suc.Add(su);
                            }

                        }

                        totalRows = int.Parse(cmd1.Parameters["@TotalRows"].ToString());

                        con1.Close();

                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " -- " + ex.InnerException);
            }
            finally
            {
            }

            return suc;

        }
0
 

Author Closing Comment

by:MadhuMenong
ID: 34211142
Thanks  buraksarica.
0
 
LVL 5

Expert Comment

by:buraksarica
ID: 34211147
That's because you add the parameter as input parameter on this line,

cmd1.Parameters.AddWithValue("@TotalRow", 0);

You should add this parameter as an output parameter like :

SqlParameter parameter = cmd1.Parameters.Add(
  "@TotalRow", SqlDbType.Int);
parameter.Direction = ParameterDirection.Output;

then you should get the value correctly.
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now