Posts tagged "scada controls silverlight"

Algorithm of Triangulation in 3D


In this algorithm, you will need list of points of polygon in sequence and you will also need a normal value of the plane with which you will able to know the direction of the plane in 3D.

 

Step 1:

First of all you have to rotate the plane to make it parallel to XZ plane. For doing so you need to find the angle of plane with X- Axis (say xAng) and Y- Axis (say yAng). Angle can be found using normal value of the plane. Then rotate the plane on X-Axis up to degree xAng and same way rotate the plane on Y-Axis up to degree yAng so that it will be parallel to XZ plane.

 

Step 2:

Start the loop from first point of polygon up to last point. In each loop you need to take 2 lines i.e. three points (say pt1, pt2, pt3) which will make two lines (pt1, pt2) and (pt2, pt3). We will call these lines as line1 and line2 for convenience.

 

Step 3:

For making the decision that these two lines will create the triangle or not you need two confirm two things:

The interior angle created by these two lines is convex.
There is no any other point which lies inside of the triangle generated by these two lines

 

Step 4:

If both these situation are valid then add all three points as one triangle into final list of triangle and replace points of line1 and line2 with new single line created from points (pt1, pt3) in the original list of points.

 

Step 5:

If any of the two situations is false then go back to step 3 taking new points as pt2, pt3 and pt4 making two lines. Here, we skip line1 as it is and again process with line2 which will become line1 in step 3 and a new line which will become line2 in step 3.

 

Step 6:

Continue these steps until there are less than 3 points in the original list which are insufficient for making a triangle. So, finally you will get a list of points in which number of points will be multiple of 3 as for each triangle we added three points.

 

This algorithm is similar to the ear clipping algorithm, but the limitation of this algorithm is that it is not able to triangulate the polygon with overlapping lines.

-
About the Author:
Software Developer,(MCA)
Gujarat,
India.
Article Source



Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - July 18, 2010 at 11:22 pm

Categories: Programming   Tags: scada controls silverlight

Building Data Aware Applications with Visual FoxPro Part 3: Universal Data Access

Summary: In this article series, we have demonstrated that Visual Class Libraries are an excellent place to store code that access your data (and by so doing, eliminating duplication of similar code and reducing application complexity). So far in the articles published earlier (Part 1 and Part 2 of this article series), we have assumed that we are building ‘pure fox’ applications and have therefore used the ‘USE’ whenever we needed to access data stored in the FoxPro database. However, the complexity of today’s applications often demand that our VFP applications be flexible enough to access data stores other than our beloved native Fox databases and tables. This article explains how to extend your data-aware classes to perform universal data access Visual FoxPro Style (i.e. accessing data stores other than Visual FoxPro such Advantage Database Server or Microsoft SQL Server). This article utilizes Ms SQL Server 2005.

Introduction: so far in this article series we have assumed that the data access code in our Visual Class Libraries (VCX) will be accessing native Visual FoxPro databases and tables. However, even though the Fox provides excellent storage capabilities, we will sometimes want or need to benefit from increased storage capacity, enhanced security and additional transactional security provided by SQL Servers in enterprise application development.

In this scenario, we can still take full advantage of the tremendous power, speed and performance of the Visual FoxPro database engine and its programming language to build powerful enterprise level applications efficiently and quickly. Visual Class Libraries still represent an excellent location to store data access code to access and process data located in remote and external data stores. This means using a Visual FoxPro front-end to access and process data in other data stores.

Visual FoxPro Universal Data Access: With VFP, there is always more than one way to perform the same task. To access and use remote data in VFP, you could for example use remote views/queries or SQL Pass Through (SPT) technology both of which would make heavy use of Open Data Base Connectivity (ODBC)  as the principal means for data access, retrieval and updates.

The term remote data as used in this article refers to data stored outside a traditional Visual FoxPro database, either on the same computer or on a computer separate from the one in which the Visual FoxPro application runs. For example, data stored in a Advantage Database Server or Microsoft SQL Server that needs to be consumed by a Visual FoxPro application can be considered remote data in this case.

Even though SPT and remove views are very powerful means of making remote data accessible to your application, Visual FoxPro’s Cursor Adapter will most probably remain the most flexible means of doing this because it provides the flexibility to get at remote data through different data source types. Using Cursor Adapters you could access native (VFP) data stores, ODBC Data sources (i.e. data exposed by means of ODBC), ADO Data Sources (i.e. Data exposed by means of ActiveX Data Objects)  or XML Data Sources.

Most VFP programmers or Visual Basic Programmers building enterprise applications will be immediately familiar with ODBC and ADO since these have been the principal means of data access to SQL Servers on the Microsoft Platform for years. Perhaps the XML Dataset could compete with these if you need to consume ADO.Net Datasets from within your VFP application or XML Datasets published by other tools that support and utilize the XML Standard.

The Cursor Adapter provides many capabilities, giving you fine control over how to manage your data sources, retrieve, edit and update data. The data returned from your cursor adapter is rendered into a native Visual FoxPro cursor so you could work with it just as you would do with cursors created from native Visual FoxPro tables. The Visual FoxPro Help pages contain some good information on how cursor adapters and their properties work.

We can use cursor adapters to retrieve data, insert new records, edit existing records and delete unwanted records from remote data databases. What is of key interest to us is the ability of cursor adapters to consume data from OLE DB/ADO data sources, ODBC Data Sources and ADO.Net Data sources (using XML of course).

In this article, we will demonstrate working with data stored in a SQL Server using Cursor Adapters wrapped up in a data access class contained in a Visual Class Library (VCX). Our ubiquitous Employees table that we have always used in previous articles in this series is this time stored in a SQL Server 2005 Express Database called syl-pcsqlexpress.students.dbo. We shall get at our SQL Server database using the SQL Server OLE DB Provider.

Building our Customers Data Access Class: To begin with we must create our data access classes as usual. In Previous articles, we created classes in Visual Class Libraries to which we then added code. The best way to access SQL Server from Visual FoxPro will be by means of its OLE DB Provider. Visual FoxPro already provides extensive support for accessing database servers using OLE DB/ADO. This means you create and use all of the normal ADO Objects that you are used to in Visual Basic. For example:

LOCAL oConn AS ‘ADODB.Connection’

LOCAL oRS AS ‘ADODB.Recordset’

oConn = CREATEOBJECT(“ADODB.Connection”)

oRS = CREATEOBJECT(“ADODB.Recordset”)

etc

would be perfectly valid statements. Now while you can use pure ADO code in this fashion to work with the returned recordset, the result would almost certainly not feel natural. By throwing the cursor adapter into the mix, you get the ability to work with the ADO Recordset as if it were a native Visual FoxPro Cursor. This means that apart from the code that creates and returns the ADO Recordset Object as demonstrated above, you can perform your usual Visual FoxPro commands such as APPEND BLANK, REPLACE, BROWSE, etc. Several steps are involved in putting together this solution:  1) We would have already created our database in SQL Server, 2) We must create a VFP Project, 3) Add a Class Library named ‘Data Access’ 4) Add a ‘Customers’ class and add all of its methods, 5) Add a new Form and Lay it out.

Let us Begin step by step then,

1)      Create the CustMast table in SQL Server 2005 Express: Our solution utilizes an SQL Server 2005 Express Database – ‘Database2SQL’. This database contains a table ‘CustMast’ that is used in this example. The CustMast table has the following structure:

 

Column Name

Data Type

Allow Nulls

Primary Key

CustomerID

Char(20)

N

Y

CustName

Char(50)

Y

 

Contact

Char(50)

Y

 

NoOfAddre

Int

Y

 

NoOfTels

Int

Y

 

 

To create your database, you need a tool that allows you to connect to and create SQL Server 2005 Express databases. Unfortunately, VFP Data Explorer allows you to create connections and query your SQL Server 2005 Databases, not create new databases! If you have Visual Studio 2005, you can create SQL Server 2005 Databases and modify schema. Alternatively, you can use Microsoft Access 2007, the database program in the Microsoft Office Suite to create a Access Project through which you can then create your SQL Server 2005 Database. For more information on how to perform these tasks, see the Microsoft Access documentation or the Visual Studio 2005 documentation.

 

After successfully creating your SQL Server 2005 Database and adding the CustMast table to it, you can use the Data Explorer in Visual FoxPro 9 (accessible by choosing the Data Explorer button on the Task Pane Manager) to browse your SQL Server and other Data resources. If you cannot see your SQL Server on the List, choose the Add Connection button to create a connection to your SQL Server so you can see all the Databases on it.

2)      Create your VFP Project: Now with the SQL Server side of things done, we must create a VFP Project by performing the following action: i) Start VFP and then select New Project  from the Start Page of the Task Pane Manager. The Create dialog box displays, ii) In the Enter Project File box, enter ‘CusAdapter’ (without the quotes) and choose the Save button. VFP creates a new blank project. You are now ready to add objects to your project.

3)      Create Your Visual Class Library: After creating your VFP Project, you must create a Visual Class Library on the Classes tab of the Project Manager and add a class to it. We shall call our class library ‘data access’ and the class added to it ‘CustMast’. We can create the class library by performing the following action: i) Choose the New button on the Classes tab of the Project Manager to display the New Class dialog box, ii) In the Class Name box, enter ‘CustMast’ without the quotation marks, iii) In the Based On list, select Cursor Adapter, iv) In the Store In box, enter ‘DataAccess’ without the quotation marks, v) Choose Ok. The system will create a new Visual Class Library and add a new blank class to it. You are now ready to program your class.

4)      Add Code To your Class: we now need to add useful code to our data access class. We have added three methods, to search for existing records, to delete an existing record and to add new records.

Adding a Record: This method is called AddRecord. It allows our program to insert a new record into the SQL Server table. It looks like this:

 

PARAMETERS arrE,intNoOfRecs AS Integer

* Declarate Variabled used locally

PUBLIC oCA as CursorAdapter

LOCAL oConn as ADODB.Connection

LOCAL oRS as ADODB.Recordset

LOCAL oException AS Exception

LOCAL cConnString

LOCAL intRows AS Integer,cMsg As Character

intRows = 0

cMsg = “”

 

IF TYPE(‘arrE’,1) <> ‘A’

      * Exist because we expected an array of valued

      RETURN .F.

ENDIF

 

IF TYPE(‘intNoOfRecs’) <> ‘N’

      * Exit because number of rows passed in array is not supplied

      RETURN .F.

ENDIF

* Handle connections – insert connection code

cConnString = [Provider=SQLOLEDB.1;Data Source=SYL-PCSQLEXPRESS;Initial Catalog=Database2SQL;User ID=;Password=;Integrated Security=SSPI]

IF NOT USED(“CustMast”) && The cursor does not exist…create it

TRY

    oConn  = createobject(‘ADODB.Connection’)

 

    * Ensure that you handle userid and password if not

    * specified in connection string.

    *   ex. oConn.Open(cConnString, userid, password)

    oConn.Open(cConnString)

 

    oRS = CREATEOBJECT(“ADODB.Recordset”)

    oRS.DataSource.CursorLocation = 3   &&adUseClient

    oRS.DataSource.LockType = 3   &&adLockOptimistic

    oRS.ActiveConnection = oConn

 

 

            THIS.DataSourceType =”ADO”

            THIS.DataSource = oRS

            THIS.MapBinary = .T.

            THIS.MapVarchar= .T.

            THIS.Alias = “CustMast”

            THIS.SelectCmd = “SELECT * FROM CustMast”

   

    IF !THIS.CursorFill()

        * Replace with error code here

        LOCAL laError

        DIMENSION laError[1]

        AERROR(laError)

        MESSAGEBOX(laError[2])

    ELSE

        * Replace with user code here. Code below allows for

        * you to edit and send updates to the backend.

        LOCAL laFlds,lcStr,lnFldCount,i

        DIMENSION laFlds[1]

        lnFldCount=AFIELDS(laFlds)

        lcStr=”"

        FOR i = 1 TO lnFldCount

                lcStr = lcStr + laFlds[m.i,1] +  “,”

        ENDFOR

        THIS.UpdatableFieldList = lcStr

        THIS.KeyFieldList=”CustomerID”

       

        *BROWSE NORMAL NOWAIT

    ENDIF

 

CATCH TO oException

    * Replace with exception handling code here

    MESSAGEBOX(oException.Message)

 

ENDTRY

ENDIF

* Add user code here.

* Note: cursors created by CursorAdapter object are closed when object is released.

 

SELECT CustMast

FOR intRows = 1 TO intNoOfRecs

      IF ISBLANK(arrE(intNoOfRecs,1))

            * No Record was supplied so we can as well exit

            oRs.Close

            RELEASE oRS

            RETURN .F.

      ENDIF

      SELECT CustMast

      GO TOP

      LOCATE FOR ALLTRIM(CustMast->CustomerID) = ALLTRIM(arrE(intRows,1))

      IF NOT FOUND()

            APPEND BLANK

            REPLACE CustMast->CustomerID WITH arrE(intRows,1)

      ENDIF

      REPLACE CustMast->CustName WITH arrE(intRows,2)

      REPLACE CustMast->Contact WITH arrE(intRows,3)

      REPLACE CustMast->NoOfAddre WITH arrE(intRows,4)

      REPLACE CustMast->NoOfTels WITH arrE(intRows,5)

ENDFOR

 

 

The first line is the PARAMETERS line that accepts two parameters ‘arrE’ (array containing one or more records to be saved) and ‘intNoOfRecs’ (an integer defining the total number of records contained in the array). Following this line, variables are declared and initialized to their correct values. oCA is a Cursor Adapter Object, oConn is an ADO Data Connection Object while oRS represents an ADO Recordset Object. The TYPE functions are used to ensure that arrE and intNoOfRecs are of the correct types. In Visual FoxPro components, passing parameters of the correct type is key to making or breaking your application. We have found that errors that VFP would ordinarily treat kindly in a Form or Program file, VFP treats rather harshly in components! The variable oConnString then contains the connection string that will be used to connect to our SQL Server OLE DB Provider and through it to our SQL Server Database. Provider=SQLOLEDB.1 indicates that we are using the Ms SQL Server OLE DB Provider. The Data Source=SYL-PCSQLEXPRESS indicates the name of the SQL Server we are connecting to. Initial Catalog=Database2SQL indicates the database that contains the table we want on the SQL Server.

 

The CREATEOBJECT function is now used to create the connection object (oConn = CREATEOBJECT(“ADODB.Connection”)) which is then immediately opened (oConn.Open). Another CREATEOBJECT function creates an ADO Recordset object (oRS = CREATEOBJECT(“ADODB.RecordSet”). The cursor of the recordset is then set to a client-side cursor and the LockType is set to 3 which represents optimistic locking. Its ActiveConnection object is set to the ADO connection object we created earlier – oConn. The next series of statements specify a data source type and alias name (‘CustMast’) for the Cursor Adapter Object. The SelectCmd is a straight forward SQL SELECT command that returns all rows from the table. This simply returns all rows in the Customer Master table and stores the results of this query in a cursor called ‘CustMast’.  (of course in a real-live solution, you will most likely fetch as you need by qualifying the SQL Command with a WHERE clause thus reducing the number of packets that have to travel over the network)

 

The CursorFill method is used to execute the SelectCmd command. If it fails, the errors are stored in the array LaError so that we can parse and deal with the errors else, we can build a list of fields so that we can update the backend. The fields in this list will determine what table fields VFP updates if you decide to send updates back to SQL Server. The comma-delimited list of updateable fields is passed to the UpdatableFieldList. The KeyFieldList must also be set to tell VFP the primary key field of your table. In our case, it is ‘CustomerID’. The FOR intRows TO intNoOfRecs…ENDFOR now loops through each record in the array and then issues the standard APPEND BLANK and REPLACE commands to insert new records and save changes to an existing record.

Find a Record: If you want to display an existing record for editing or display a record you want to delete, you will have to search for the record and then display it. The procedure shown here searches for the record that matches the key and then returns it in an array. The code in this method looks like this:

 

* Search for a record that meets the criteria

PARAMETERS cCustomerID As Character,arrE,intNoOfRecs AS Integer

 

PUBLIC oCA as CursorAdapter

LOCAL oConn as ADODB.Connection

LOCAL oRS as ADODB.Recordset

LOCAL oException AS Exception

LOCAL cConnString

LOCAL intRows AS Integer

 

intRows = 0

 

* Make sure that supplied parameters are of the correct types

IF TYPE(‘cCustomerID’) <> ‘C’       && Customer ID must be a Character

      RETURN .F.

ENDIF

 

IF TYPE(‘arrE’,1) <> ‘A’      && arrE must be an array

      RETURN .F.

ENDIF

 

IF TYPE(‘intNoOfRecs’) <> ‘N’ && intNoOfRecs must be a number

      RETURN .F.

ENDIF

 

* Handle connections – insert connection code

cConnString = [Provider=SQLOLEDB.1;Data Source=SYL-PCSQLEXPRESS;Initial Catalog=Database2SQL;User ID=;Password=;Integrated Security=SSPI]

IF USED(“CustMast”)

      * Close it so we can obtain the latest records for display

      USE IN CustMast

ENDIF

TRY

    oConn  = createobject(‘ADODB.Connection’)

 

    * Ensure that you handle userid and password if not

    * specified in connection string.

    *   ex. oConn.Open(cConnString, userid, password)

    oConn.Open(cConnString)

 

    oRS = CREATEOBJECT(“ADODB.Recordset”)

    oRS.DataSource.CursorLocation = 3   &&adUseClient

    oRS.DataSource.LockType = 3   &&adLockOptimistic

    oRS.ActiveConnection = oConn

 

    oCA=CREATEOBJECT(“CursorAdapter”)

    oCA.DataSourceType = “ADO”

    oCA.DataSource = oRS

    oCA.MapBinary = .T.

    oCA.MapVarchar = .T.

 

    oCA.Alias = “CustMast”

    oCA.SelectCmd = “SELECT * FROM CustMast WHERE CustMast.CustomerID = ‘” + cCustomerID + “‘”

   

    IF !oCA.CursorFill()

        * Replace with error code here

        LOCAL laError

        DIMENSION laError[1]

        AERROR(laError)

        MESSAGEBOX(laError[2])

    ELSE

        * Replace with user code here. Code below allows for

        * you to edit and send updates to the backend.

        LOCAL laFlds,lcStr,lnFldCount,i

        DIMENSION laFlds[1]

        lnFldCount=AFIELDS(laFlds)

        lcStr=”"

        FOR i = 1 TO lnFldCount

                lcStr = lcStr + laFlds[m.i,1] +  “,”

        ENDFOR

        oCA.UpdatableFieldList = lcStr

        oCA.KeyFieldList=”CustomerID”

       

        *BROWSE NORMAL NOWAIT

        SELECT CustMast

        DO WHILE NOT EOF()

            IF ALLTRIM(CustMast->CustomerID) = ALLTRIM(cCustomerID)

            intRows = intRows + 1

            DIMENSION arrE[intRows,5]

                          arrE(intRows,1) = CustMast->CustomerID

                          arrE(intRows,2) = CustMast->CustName

                          arrE(intRows,3) = CustMast->Contact

                          arrE(intRows,4) = CustMast->NoOfAddre

                          arrE(intRows,5) = CustMast->NoOfTels

                              EXIT

                              ENDIF

        ENDDO

        intNoOfRecs = intRows

    ENDIF

 

CATCH TO oException

    * Replace with exception handling code here

    MESSAGEBOX(oException.Message)

 

ENDTRY

 

 

 

The FindRecord method bears some resemblance to the AddRecord method. The PARAMETERS line passes the Customer ID to search for along with an empty array to hold all records that meet the criteria so that these can be returned to the calling program (in this case the Form). The SELECT SQL statement is now qualified with a WHERE clause. This is a classic example of the ‘fetch as you need’ paradigm that allows you to build efficient VFP programs that reduce network traffic and perform efficiently. Once the CursorFill method populates the array, a DO WHILE…ENDDO loop populates the array.

Delete a Record: This method is called RemoveRecord and permits removal of the record from the SQL Server Table. The code looks like this:

 

* Search for a record that meets the criteria

PARAMETERS cCustomerID As Character

 

PUBLIC oCA as CursorAdapter

LOCAL oConn as ADODB.Connection

LOCAL oRS as ADODB.Recordset

LOCAL oException AS Exception

LOCAL cConnString

LOCAL intRows AS Integer

 

intRows = 0

 

* Make sure that supplied parameters are of the correct types

IF TYPE(‘cCustomerID’) <> ‘C’       && Customer ID must be a Character

      RETURN .F.

ENDIF

 

*!*   IF TYPE(‘arrE’,1) <> ‘A’      && arrE must be an array

*!*         RETURN .F.

*!*   ENDIF

 

*!*   IF TYPE(‘intNoOfRecs’) <> ‘N’ && intNoOfRecs must be a number

*!*         RETURN .F.

*!*   ENDIF

 

* Handle connections – insert connection code

cConnString = [Provider=SQLOLEDB.1;Data Source=SYL-PCSQLEXPRESS;Initial Catalog=Database2SQL;User ID=;Password=;Integrated Security=SSPI]

IF USED(“CustMast”)

      * Close it so we can obtain the latest records for display

      USE IN CustMast

ENDIF

TRY

    oConn  = createobject(‘ADODB.Connection’)

 

    * Ensure that you handle userid and password if not

    * specified in connection string.

    *   ex. oConn.Open(cConnString, userid, password)

    oConn.Open(cConnString)

 

    oRS = CREATEOBJECT(“ADODB.Recordset”)

    oRS.DataSource.CursorLocation = 3   &&adUseClient

    oRS.DataSource.LockType = 3   &&adLockOptimistic

    oRS.ActiveConnection = oConn

 

    oCA=CREATEOBJECT(“CursorAdapter”)

    oCA.DataSourceType = “ADO”

    oCA.DataSource = oRS

    oCA.MapBinary = .T.

    oCA.MapVarchar = .T.

 

    oCA.Alias = “CustMast”

    oCA.SelectCmd = “SELECT * FROM CustMast WHERE CustMast.CustomerID = ‘” + cCustomerID + “‘”

   

    IF !oCA.CursorFill()

        * Replace with error code here

        LOCAL laError

        DIMENSION laError[1]

        AERROR(laError)

        MESSAGEBOX(laError[2])

    ELSE

        * Replace with user code here. Code below allows for

        * you to edit and send updates to the backend.

        LOCAL laFlds,lcStr,lnFldCount,i

        DIMENSION laFlds[1]

        lnFldCount=AFIELDS(laFlds)

        lcStr=”"

        FOR i = 1 TO lnFldCount

                lcStr = lcStr + laFlds[m.i,1] +  “,”

        ENDFOR

        oCA.UpdatableFieldList = lcStr

        oCA.KeyFieldList=”CustomerID”

        SELECT CustMast

        DELETE FOR ALLTRIM(CustMast->CustomerID) = ALLTRIM(cCustomerID)

      

    ENDIF

 

CATCH TO oException

    * Replace with exception handling code here

    MESSAGEBOX(oException.Message)

 

ENDTRY

 

 

 

This code is exactly the same as the code to search for a record with some very minor variations. We use a DELETE FOR statement to remove a record. Because we have not made a setting for the DeleteCmd property of the CursorAdapter, the CursorAdapter automatically generates the DELETE SQL command to perform the deletion as long as the CursorAdapter AllowDelete property is set to true (.T.), the default.

5)      Create your Data Entry Form: Now to complete this example, we must create a new data entry form. Your designed form would contain controls to display all the fields in your SQL Server table. The Data entry Form could contain the following controls:

txtCustomerID: This is a text box control. It will be used to enter the Customer ID or display one for editing. When you enter a value in this field, the code ion the Valid event will be used to check if this customer already exists in the application database. In this respect, it will call the FindRecord method of the CursorAdapter class.
txtCustName: This is the name of the customer. It will display a customer Name or you can type a new customer name into it.
txtContact: Name of principal contact person.
txtNoOfAddr: Total number of addresses received from this customer.
txtNoOfTels: Total number of Telephone Numbers received from this customer
cmdAddRecord: Command button whose click event code calls the AddRecord method of the CursorAdapter class.
cmdDelete: Command button whose click event code calls the RemoveRecord method of the CursorAdapter class.
cmdBrowse: Display data returned from your SQL Server in Browse mode.
cmdNew: Display a blank record template so that you can create a new record.
Form Caption: Set the Form Caption to ‘Customer Master’.

 

AS with our visual class library, the form will also contain code as follows:

Display an existing record: We will use the same form for adding new records, amending existing records plus saving any changes made, and deleting unwanted records from our SQL Server database table. The code to do this is placed in the Valid event of the txtCustomerID  textbox field. When a user enters an ID into the CustomerID field, the system calls the FindRecord method of our class that performs the search. If the FindRecord method locates the record in the SQL Server table the record is returned in an array to the form to be displayed for editing or deletion as the case may be. Note that the Valid event passes an empty array arrE and a number variable intNoOfRecs. intNoOfRecs is not strictly needed in this example but illustrates that it is possible to return more than one record from the class to the form to be cached locally in a cursor (in this case, we are not using it). The code in the Valid event of the txtCustomerID textbox looks like this:

 

* Search for a Customer Record that meets the criteria and then display the record for editing

IF ISBLANK(THIS.Text)

      RETURN

ENDIF

 

LOCAL oCU As Object ,intNoOfRecs As Integer,lAnswer As Logical 

DIMENSION arrE[1,5]

arrE[1,1] = THISFORM.txtCustomerID.Value

arrE[1,2] = THISFORM.txtCustName.Value

arrE[1,3] = THISFORM.txtContact.Value

arrE[1,4] = THISFORM.txtNoOfAddr.Value

arrE[1,5] = THISFORM.txtNoOfTels.Value

intNoOfRecs = 0

SET UDFPARMS TO REFERENCE

SET CLASSLIB TO  dataaccess ADDITIVE

oCU = CREATEOBJECT(“CustMast”)

 

lAnswer = oCu.FindRecord(THIS.Value,arrE,intNoOfRecs)

IF intNoOfRecs > 0

      THISFORM.txtCustName.Value = arrE(1,2)

      THISFORM.txtContact.Value = arrE(1,3)

      THISFORM.txtNoOfAddr.Value = arrE(1,4)

      THISFORM.txtNoOfTels.Value = arrE(1,5)

ENDIF

 

Adding or Saving a Record: To add a record to our SQL Server table or save any changes we have made, we add a command button cmdAddRecord whose click event contains the following code:

 

LOCAL oCU As Object ,intNoOfRecs As Integer,lAnswer As Logical 

DIMENSION arrE[2,5]

arrE[1,1] = THISFORM.txtCustomerID.Value

arrE[1,2] = THISFORM.txtCustName.Value

arrE[1,3] = THISFORM.txtContact.Value

arrE[1,4] = THISFORM.txtNoOfAddr.Value

arrE[1,5] = THISFORM.txtNoOfTels.Value

intNoOfRecs = 1

SET UDFPARMS TO REFERENCE

SET CLASSLIB TO  dataaccess ADDITIVE

oCU = CREATEOBJECT(“CustMast”)

lAnswer = oCu.AddRecord(arrE,intNoOfRecs)

 

 

This code is straight forward. It populates an array arrE with the values entered in the controls of the form, then passes the array to the AddRecord method of our class that connects to the SQL Server table to save the record. It checks the table to see if the record already exists. If it does, it will save any changes you have made else, it will insert the new record using APPEND BLANK. This means that to amend an existing record and save changes to it, enter an existing ID in the CustomerID field to display the record, make changes to the record on the form, and then choose the AddRecord button to save the changes you have made.

Deleting an existing record: The cmdDelete button fulfills the ability to remove unwanted records from the SQL Server table. It calls the RemoveRecord method of the class passing to it the Customer ID entered in the txtCustomerID text box field. The code looks like this:

 

To delete a record, you would enter the ID of the customer whose record you want to delete in the txtCustomerID text box field to cause the record to display after which you would then choose or click the Delete button to delete the record.

Display a Blank Record Template: We have added the cmdNew button to enable us obtain a blank record template. Clicking this button clears away the currently displayed record thus allowing you to begin working on a new record. The code for the click event of this command button looks like this:

 

THISFORM.txtCustomerID.Value = “”

THISFORM.txtCustname.Value = “”

THISFORM.txtContact.Value = “”

THISFORM.txtNoOfAddr.Value = 0

THISFORM.txtNoOfTels.Value = 0

THISFORM.txtCustomerID.SetFocus

 

You will notice that this same button code is called from both the Save and Delete buttons through the single line: cmdNew.Click

 

Conclusion: This article demonstrates Visual FoxPro’s ability to access multiple external data sources by using the CursorAdapter. In this example, we have demonstrated being able to get at data stored in a SQL Server 2005 database. The data access is done by using a data access component stored in a Visual Class Library (VCX) to connect to the SQL Server 2005 database. Arrays are used to move data between the form and the data access class. While we primarily made us of ActiveX Data Objects (ADO) in our example, CursorAdapters allow you to use native Visual FoxPro (VFP) Data, Open Database Connectivity (ODBC) and Extensible Markup Language (XML). This means that the specific data access method you choose to get at external data would be tailored to the task at hand, the requirements of the particular system you are building and the particular database or type of data you wish to access. Even though we have deliberately kept our example simple and rudimentary to demonstrate the basic concept, you can easily build powerful enterprise level applications by combining other concepts such as local cursors to cache data on the form returned with arrays, implementing buffering with the data created by your CursorAdapter or combining the power and programmability of CursorAdapters to extend your typical data environment.

-
About the Author:
Sylvester Alelele is a Senior Systems Analyst/Programmer and Group Head of Operations for Forest-Elephant Technology & Procurement Group Plc. He lives and works in Addis Ababa Ethiopia. He develops applications with Microsoft Visual FoxPro, Visual Basic and the .Net Framework, Oracle, Advantage Database Server and Ms SQL Server. He has over sixteen (16) years of experience building enterprise database solutions of all sizes
Article Source

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - July 6, 2010 at 8:23 am

Categories: Programming   Tags: briefly about c# and c# tools, C# keywords classified, download C# compiler for windows xp, download different Types Of Compilers in C#, explain briefly about c# and c# tools, multiform application in C#.Net, scada controls silverlight

Role of 3-Types of ISTQB Advanced Certified Experts in a Testing Project

Roles of different experts like “Test Managers”, “Test Analysts” and “Technical Test Analysts” are quite inter-linked to some extent.

The “Test Manager” is obviously responsible for managing the entire testing process. However the roles of “Test Analysts” and “Technical Test Analysts” are equally important since they are instrumental in implementing the testing process. A close understanding among the senior persons like  “Test Manager”, “Test Analysts” and “Technical Test Analysts” is extremely important for the success of the project.

Thus before analyzing the roles of the three experts, let us quickly go through the typical steps involved in a generic testing process.

Every test may consist of several individual activities, however there are five generic steps encompassing all such activities.

Let us briefly discuss these steps involved in the testing process.

1) Test Planning and Test Control: The “Test Manager” is responsible for following functions.

# Creation of a comprehensive Test Plan – documenting covering most of the information.
# Deciding the approach for testing.
# Planning of resources like equipment, software and personnel.
# Planning of training needs and hiring requirements.
# Setting the strategies.
# Creation of the test schedule.
# Deciding the metrics required for controlling and monitoring the project.
# Risk management – involving identification of risks backed by their mitigation plans.

When the “Test Manager” controls a project, he is expected to control its risks as well. When a risk is identified, the “Test Manager” needs to tackle it using a suitable mitigation plan. He may chose to transfer the risk somewhere else or it may even be ignored also. In order to plan & effectively deal with risk items it is essential that most of the risks be identified at the beginning of the project.

Usually risk management comes under the responsibility of the “Test Manager”. Whereas “Test Analysts” and “Technical Test Analysts” make valuable contribution of providing information helpful in risk identification and making risk mitigation plans as part of the planning process.

2) Test Analysis and Test Design:
Involves deep consideration of the details of the testing project. Primarily it needs answering questions like;

# Taking decision on what to test.
# How much effort must be put in.
# What types of testing should be done.
# What type of tools will be required

During the test analysis stage, we may need to review the requirements documents & probably decide to go in for performance testing. This would call for defining performance test cases, procuring suitable performance testing tools and organizing other resources.

During the test analysis stage, we carry out the review of the test basis as well, i.e. the review of documents from which we decide as to what should we test – should we do static testing etc.

The primary objective of carrying out such reviews remains;

# To record different problems to ensure resolution as well as use it as a guideline for process improvement for the future.

# Collection of data needed to write the test specification. The test specification document, if properly named, indicates what is going to be tested.

# Creation of test design specification, including risk analysis tables that will guide a risk-based testing effort.

For an effective risk analysis contribution from different project stakeholders is extremely essential. The people who know the likely areas of failure can predict the technical risk. For example a developer knows that some of the excessively complicated areas of the code are vulnerable. Similarly testers are aware of particular portions of functionality that they find quite difficult to test well.

The “Test Manager” is responsible for coordinating and ensuring the creation of the test design specification & quality risk analysis. The “Test analysts” are responsible to ensure that the testing concerns are adequately taken care of.

 

3) Test Implementation and Test Execution:
Based upon the test design specification document, we create different test cases and test procedures.

Two type of test cases are created:

1) Logical test cases: These are the high-level test descriptions which do not define the data for use in the tests.

2) Concrete test cases: These include the actual data, which is going to be used in the tests. Since spreadsheets containing actual data are referred by many test cases, hence they become concrete only when the instructions get joined with the data in actual practice.

“Test Procedure” is usually included in the test case itself. However according to IEEE-829 “Test Procedure” is a standalone document describing the method to execute a particular test case or a set of test cases.

The “Test Procedure” document typically contain following information:

a) Test procedure specification identifier
b) Purpose describing list of applicable test cases.
c) Special requirements.
d) Procedure steps like – log, setup, start, proceed, measure, shutdown, restart, stop, wrap-up, contingencies etc.

While designing the test cases, possibility of automated test execution is explored. If automation is considered viable, automation scripts are created at this stage of the project. Automation scripts are self-contained test procedures usually known as test scripts.

Next task is execution of the test cases may be manually or by automated means.

4) Evaluation of Exit Criteria and Reporting:

It is important to know when we should finish testing. Test completion is decided based on meeting the exit criteria defined during the planning phase.

Usually it is a crucial Ship / Don’t Ship decision point, involving return of the testing information to the project team for the release decision.

“Test Summary Report” is the last test standard document according to IEEE-829 that emerges out of this step. The “Test Summary Report” can be prepared periodically in the form of a test progress report while concluding a particular level of testing – say for example after concluding the integration testing. Common practice of creating “Test Summary Report” is while concluding the testing effort.

The “Test Summary” document typically contain following information:

a) Test summary report identifier
b) Summary of evaluation of the test items
c) Variances
d) Assessment of being comprehensive
e) Summary of results
f) Evaluation of every test item
g) Summary of activities
h) Approvals

5) Test Closure Activities:
The test closure activities take place after shipping of the release. These activities usually receive less attention and thus remain under budgeted due to the pressure of the next project already in the queue.

If we want to quickly return to the closing project for any maintenance releases or patches etc, it is essential that the test manager remains firm on the correct & systematic operation of the closure activities.

During test closure stage following activities are carried out;

# Carry out all types of wrap-up reporting.
# Carry out documentation & archiving of the test environments.
# Archiving the test documents and tests data.
# Clearing the decks for the project next in the pipeline.

Technical roles of “Test Analyst” and “Technical Test Analyst”:

In addition to certain specific activities that are handled exclusively by “Test Analyst” or “Technical Test Analyst”, there are certain common activities that are taken care of by either or both these persons.

Activities under the responsibility of “Test Analyst” and “Technical Test Analyst”:

1) To describe the desired features of systems-of-systems

2) To explain the factors influencing the testing of systems-of-systems

3) To describe the desired features of safety-critical systems

4) To describe the testing tasks those are particularly significant for testing safety-critical systems and provide examples of industry-specific standards.

5) To describe the desired features of real-time & embedded systems

6) To explain the criteria that influences the level of test condition development.

7) To explain and provide examples of test oracles and method of using it in test documentation.

Role of 3 Types of ISTQB Advanced Certified Experts in a Testing Project To describe the conditions that must be in place prior to the test execution, including the test-ware, defect-tracking system, configuration management system and test environment etc.

9) To find out if the test completion criteria have been fulfilled according to the desired norms.

Activities under the responsibility of “Test Analyst”

1) To analyze the requirement specification & breaking it down to a test specification according to IEEE-829 standard, focusing on functional & domain test cases as well as test procedures

2) To explain the stages in the software development lifecycle where functional testing shall be suitable

3) To understand the logic behind test analysis and design being static testing techniques that can be used to find out defects

4) To prioritize the process of test cases creation & subsequent execution according to the risk and create suitable test documentation

5) To identify the activities of risk based testing for domain testing

Activities under the responsibility of “Technical Test Analyst”

1) To explain different stages required in the software development lifecycle needing structure-based testing & nonfunctional testing.

2) To identify the activities of risk based testing for technical testing

-
About the Author:
http://www.softwaretestinggenius.com A Storehouse of Complete Knowledge on Software Testing & QA under one Roof
Article Source

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - July 3, 2010 at 8:46 am

Categories: Programming   Tags: briefly about c# and c# tools, C# keywords classified, download C# compiler for windows xp, download different Types Of Compilers in C#, explain briefly about c# and c# tools, multiform application in C#.Net, scada controls silverlight

ImageGear v17.3 for Microsoft .NET – Do More with Images

ImageGear for .NET is the Software Development Kit for .NET WinForms, ASP.NET and WPF imaging and includes features such as Scanning, compression, Viewing, annotation, printing, Image editing, processing. It also ships with Comprehensive OCR capabilities and support for PDF and vector.

ImageGear v17.3 offers a comprehensive OCR solution such as support for OCR recognition in over 100 languages, Auto-Zoning feature automatically segments the image into zones, Zone-based recognition, Dictionary support in addition to Several image processing and cleanup enhancements.

The product supports several formats such as Image over text PDF, Plain text PDF, Microsoft Office 2007, Office 97: Word and Excel, RTF, HTML, and XML. Version 17.3 introduces new features for ASP.NET such as Annotation support for Text, Rectangle, Ellipse, Line, and more, Zero footprint technology eliminates security issues when deploying, Loading and saving of annotations in an open XML format.

Moreover, developers can also Create, select, delete, modify, and change z-order of annotations in the viewer. The latest version ships with support for Apple Safari and Google Chrome browsers

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - May 21, 2010 at 12:57 am

Categories: Programming   Tags: "visual studio 2010" "pictures toolbar", briefly about c# and c# tools, c sharp compiler download, c# compilers, C# keywords classified, develop in c# in windows98, download C# compiler for windows xp, download different Types Of Compilers in C#, explain briefly about c# and c# tools, ImageGear v17.3, ImageGear v17.3 for .NET, link:ROOVaVwgdXMJ:www.managednetworks.co.uk/, multiform application in C#.Net, scada controls silverlight

Changing the appearance of a picture in Microsoft Expression Web 3

It is quite useful to be able to edit a picture and its appearance while working with your web pages. You can do this by using the ‘Pictures toolbar’ or through the Appearance tab on the Picture Properties dialog box.

The toolbar has various buttons that help you set the dimensions, crop, rotate, flip a picture.

It also has options to change the display of the picture by adjusting its brightness, contrast, transparency, grayscale and also add a beveled edge to it. And yes, you can always revert back all your changes since you last saved your webpage, by clicking on the ‘Restore’ button.

The Appearance tab on the other hand has options like wrapping style, layout options and size specifications. You can use both of them to customize the look of the pictures in your webpage.

NOTE: The Picture toolbar has plenty of options to modify a picture, modify its appearance and create hotspots, resample images and such other.

The Pictures toolbar will now be docked below other toolbars. All the buttons except the first one would grayed out. The first button is to ‘Insert Picture From File’ which will enable you to insert a picture onto your page. To activate rest of the toolbar, select the picture.

View the Original article

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - May 9, 2010 at 12:36 am

Categories: ASP.NET   Tags: "visual studio 2010" "pictures toolbar", appearance, briefly about c# and c# tools, c sharp compiler download, c# compilers, C# keywords classified, Changing, develop in c# in windows98, download C# compiler for windows xp, download different Types Of Compilers in C#, explain briefly about c# and c# tools, Expression, microsoft, multiform application in C#.Net, picture, scada controls silverlight

A Simple approach to build a Silverlight 3.0/Silverlight 4.0 application that consumes a WCF Service

Silverlight has been around for quite some time now and I hope most of you who have been working on Silverlight 3.0, might have started migrating to Silverlight 4.0. As you are aware, Silverlight is now used for developing LOB applications where the requirement is to develop loosely coupled browser based applications using Silverlight.

One of the approaches here is to remove the dependency between Model  and View (UI) so that they can be developed and tested independent from each other. This article shows how to create a Silverlight application that consumes a WCF service keeping minimum dependencies between the Model and ViewNote.

This article does not use the MVVM approach as indicated earlier. Check out the MIX session by Laurent to know more about building MVVM applications  by visiting http://live.visitmix.com/MIX10/Sessions/EX14

In this article, I have used WCF service which is responsible for Database communication. You can use ADO.NET entity framework and ADO.NET Data service instead of writing data access code in WCF, but we will leave that to a different article.

Note: In this article I have used VS2010 RC, WCF 4.0 and Silverlight 4.0.Step 1: Open VS2010 and create a blank solution, name it as ‘SILV4_MVVM’.Step 2: To this solution, add a WCF application project, name it as ‘WCF_DataService’. Rename ‘IService1’ to ‘IService’ and ‘Service1.svc’ to ‘Service.svc’.Step 3: To this WCF Service project, add a new class and name it as ‘DbManager’.

This class will act as a Database communication class. Write the implementation of the class as shown below

View the Original article

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - May 3, 2010 at 8:56 pm

Categories: ASP.NET   Tags: "silverlight 4 samples", "silverlight 4" "GroupBox Control", "visual c# express 2010" "service project", 3.0/Silverlight, anoop madhusudanan, application, approach, briefly about c# and c# tools, Build, c sharp compiler download, c# compilers, C# keywords classified, consumes, develop in c# in windows98, download C# compiler for windows xp, download different Types Of Compilers in C#, explain briefly about c# and c# tools, group box control in silverlight4, groupbox alternative silverlight, GroupBox with SilverlightToolkit 4, high volume wcf pollingduplex call, multiform application in C#.Net, sample silverlight application imaging, scada controls silverlight, scada silverlight, Service, silverlight, silverlight 4 multilanguage, silverlight 4.0 whiteboard, silverlight DataPointSeries Mouse Event, Silverlight DICOM, silverlight dragEnter, silverlight dragEnter dragOver dragLeave example, silverlight emf, silverlight groupbox, silverlight groupbox 4.0, silverlight groupbox alternative, silverlight groupbox missing, silverlight scada wcf, silverlight toolkit "drag drop treeview", silverlight toolkit dragenter event, Silverlight WCF polling duplex white board, silverlight4 GroupBox, silverlight4 multi-language, silverlight4 seo, Silverlight4 tif, SilverLight4ã??ColorPicker, Simple, sliverlight4 GroupBox, widgets +"silverlight 4", windows forum consumes silverlight duplex polling, www.silverlightconfiguration.net

DotNetCurry Completes 3 Years. $18,000 Worth Mega GiveAway

On April 28th, 2007, Minal and I started this site. This site is three years old now and we are proud of what we have achieved over these three years.  What started as a seemingly modest technology site, has today grown to be a popular .NET website.

The reason we have continued to grow is  because DotNetCurry is no longer ‘just us’. We are now a team of professional and dedicated authors, most of us MVP’s, who have one thing in common – Passion. Passion to give it back to the community.

Passion to learn, upgrade and share our knowledge on the latest technologies, and that is what DotNetCurry is all about!DotNetCurry.com is not only a developer-designer focused content site, but also one that aims at giving a better understanding of a technology.

Our aim has always been to present concepts and solutions in the simplest possible way and in a step-by-step manner. The site features articles and tips on .NET, ASP.NET, MVC, AJAX, jQuery, LINQ, Silverlight, Visual Studio, Expression Web, C#, VB.NET, Windows Forms, Windows Phone 7 etc

View the Original article

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - May 2, 2010 at 12:30 am

Categories: ASP.NET   Tags: $18, 000, briefly about c# and c# tools, c sharp compiler download, c# compilers, C# keywords classified, Completes, develop in c# in windows98, DotNetCurry, download C# compiler for windows xp, download different Types Of Compilers in C#, explain briefly about c# and c# tools, GiveAway, multiform application in C#.Net, scada controls silverlight, Worth, Years.

Simple Databinding and 3-D Features using Silverlight in Windows Phone 7 (WP7)

Simple Databinding and 3-D Features using Silverlight in Windows Phone 7 (WP7) Windows Phone 7 (WP7) is the upcoming next generation Mobile Operating System by Microsoft.

Amongst the many features, one of the nice features is that it has support for Silverlight 4.0. So most of the new features like 3-D, Databinding etc. are now available on WP7. In this article I will explain the basic Databinding as well as 3-D feature on Windows Phone 7.

For development of WP7, you can use the VS 2010 Express 2010 for Windows Phone with the Windows Phone Developer Tools. You can get the installer from the following path:http://www.microsoft.com/express/Downloads/#2010-Visual-Phone

VS 2010 Express for WP7 gives you the IDE to develop WP7 apps. This also installs Silverlight 4.0 runtime and Silverlight 4.0 tools for VS 2010 (if VS2010 RC is previously installed on your machine). When you create a new Windows Phone application, you will get the following design layout:

View the Original article

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - April 27, 2010 at 1:13 am

Categories: ASP.NET   Tags: (WP7), anoop madhusudanan, Databinding, Features, high volume wcf pollingduplex call, Phone, sample silverlight application imaging, scada controls silverlight, scada silverlight, silverlight, silverlight 4.0 whiteboard, silverlight DataPointSeries Mouse Event, Silverlight DICOM, silverlight dragEnter, silverlight dragEnter dragOver dragLeave example, silverlight emf, silverlight scada wcf, silverlight toolkit "drag drop treeview", silverlight toolkit dragenter event, Silverlight WCF polling duplex white board, Silverlight4 tif, Simple, Using, windows, windows forum consumes silverlight duplex polling, www.silverlightconfiguration.net

Setting the Frame properties in Expression Web 3

In one of my earlier articles; ‘Using Frames in Microsoft Expression Web 2’ we have already learnt how to use frames in your web pages. Using frames in Expression Web 3 is not different than it was in version 2.

In this article, we will see how you can customize the appearance of your frames by using their properties.Well though frame properties do not transform the entire look and feel of the frames, they let you customize their appearance.

You can change the way a frame looks by changing its borders, margins, spacing and such other. You can also add scrollbars to scroll through the frame or lock it so that users cannot resize it in the browser. Let us take a look at the frame properties.

To open the Frame Properties dialog box, right-click inside a frame on the frames page and then choose Frame Properties. The Frame Properties dialog box is prompted as shown below:

View the Original article

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - April 21, 2010 at 2:03 am

Categories: ASP.NET   Tags: Expression, Frame, properties, scada controls silverlight, Setting

My Favorite New Features in Visual Studio 2010

On Tuesday, April 13th, Microsoft released Visual Studio 2010 and the .NET Framework 4.0 (which includes ASP.NET 4.0). To get started with Visual Studio 2010 you can either download a trial version of one of the commercialeditions or you can go grab the free Visual Web Developer 2010 Express Edition.

The Visual Studio 2010 user experience isnoticeably different than with previous versions. Some of the changes are cosmetic – gone is the decades-old red and orange color scheme, having been replaced with blues and purples – while others are more substantial. For instance, the Visual Studio 2010 shell was rewritten from the ground up to use Microsoft’s Windows Presentation Foundation (WPF).

In addition to an updated user experience, Visual Studio introduces an array of new features designed to improve developer productivity. There are new tools for searching forfiles, types, and class members; it’s now easier than ever to use IntelliSense; the Toolbox can be searched using the keyboard; and you can use a single editor – Visual Studio2010 – to work on.

This article explores some of the new features in Visual Studio 2010. It is not meant to be an exhaustive list, but rather highlights those features that I, as an ASP.NET developer, find most useful in my line of work.

View the Original article

Be the first to comment - What do you think?
Posted by Anand Narayanaswamy - April 16, 2010 at 7:52 pm

Categories: Programming   Tags: "msdn library" "visual studio 2010 express", "visual studio express 2010" debug, .tif silverlight visual basic, compilation c# express 2010, crystal report per visual studio 2010, crystal report visual studio 2010 review, crystal reports visual studio 2010 express, csc.exe command line compiler "studio 2010", csc.exe Visual Studio 2010, csharp whiteboard, faqs Visual Studio 2010, Favorite, Features, google scada imaging, notepad editor in visual studio 2010, sample DragLeave in c#, scada controls silverlight, show task list c# express 2010, silverlight shared whiteboard, Studio, Task List Howto In Vs 2010 Express, task list howto in vs2010 express, toolbar of crystal report on vs 2010, using crystal reports visual studio 2010, using csc with c# 2010 express, vc express 2010 command line, Visual, visual studio 2010 + FAQs, visual studio 2010 compiler, visual studio 2010 csc executed, visual studio 2010 express "task list", visual studio 2010 express C# dos compiler csc, visual studio 2010 express compile to exe, visual studio 2010 faq, visual studio 2010 rc performance editor sluggish, visual studio 2010 s sharp express line numbers, visual studio express 2010 compiler review, VS2010 boon for testers, where is command prompt visual c# express 2010, where is csc.exe c# 2010 express, why is intellisense unavailable in clr applications, WINDOWS7 visual studio 2010 commandline compile Linq missing

Next Page »